如何为矩阵子元素补充None,统一子数组长度?
解决方案
要生成指定尺寸的矩阵并补全None,你可以通过先初始化固定尺寸的全None数组再填充对应序列,或者先生成补全后的列表再转成numpy数组的方式实现。以下是两种可行方法:
方法一:列表推导补全后转numpy数组
先遍历每个m[i]生成对应序列,用None补足到最大长度,再转为numpy的object类型数组(需兼容数值和None):
import numpy as np m = np.array([2,4,1]) max_len = m.max() # 生成每行补全后的列表 Z_comb_list = [list(np.arange(mi)) + [None]*(max_len - mi) for mi in m] # 转为numpy object数组 Z_comb = np.array(Z_comb_list, dtype=object) print(Z_comb)
方法二:numpy数组初始化后填充
先创建形状为(len(m), max_len)、默认值为None的数组,再逐个填充每行的有效序列:
import numpy as np m = np.array([2,4,1]) max_len = m.max() # 初始化全为None的固定尺寸数组 Z_comb = np.full((len(m), max_len), None, dtype=object) # 遍历填充每行的序列 for idx, mi in enumerate(m): Z_comb[idx, :mi] = np.arange(mi) print(Z_comb)
原代码问题说明
你原来的代码直接将不等长的np.arange结果存入object数组,导致每行长度不一致。而我们需要的是固定尺寸的二维数组,因此必须先将每行补全到最大长度,再构建numpy数组。
两种方法都能输出预期结果:
[[0 1 None None] [0 1 2 3] [0 None None None]]
内容的提问来源于stack exchange,提问作者Nicholas Nicholas
相关产品推荐
相关产品推荐

