Python/Numpy存在匹配维度时无法创建不规则数组问题咨询
问题原因
numpy的np.array()在构造数组时,会优先尝试将输入的序列堆叠为常规的多维数值数组,只有当输入元素的维度完全无法匹配堆叠时,才会退而生成dtype=object的数组。
- 当A为
(12,2)形状、B为(12,)形状时,两者的第一个维度长度都是12,numpy会默认尝试进行广播对齐堆叠,此时发现A的第二个维度长度为2、B没有第二个维度,无法完成广播,就会抛出你看到的报错。 - 当A修改为
(20,2)形状后,A的第一个维度长度为20、B的第一个维度长度为12,numpy直接判定无法堆叠为常规多维数组,因此直接生成元素为object类型的数组,不会触发报错。
正确存储方案
如果需要将两个形状不匹配的数组存为numpy的object数组,建议避开np.array()的自动堆叠逻辑,手动初始化后赋值:
import numpy as np A = np.zeros((12,2)) B = np.zeros((12,)) # 先初始化长度为2的空object数组 C = np.empty(2, dtype=object) C[0] = A C[1] = B
如果你没有强制要求使用numpy数组存储,也可以直接用Python列表[A, B]存储两个数组,使用起来更灵活。
内容的提问来源于stack exchange,提问作者ramgorur
相关产品推荐
相关产品推荐

