首页 > 解决方案 > Numpy:无法将输入数组从形状(3)广播到形状(1)

问题描述

我想创建一个 numpy 数组b ,其中每个组件都是一个二维矩阵,其维度由向量a的坐标确定。

我得到以下满足我的条件:

>>> a = [3,4,1]
>>> b = [np.zeros((a[i], a[i - 1] + 1)) for i in range(1, len(a))]
>>> np.array(b)
array([ array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]]),
       array([[ 0.,  0.,  0.,  0.,  0.]])], dtype=object)

但是如果我发现了这种不起作用的病态情况:

>>> a = [2,1,1]
>>> b = [np.zeros((a[i], a[i - 1] + 1)) for i in range(1, len(a))]
>>> b
[array([[ 0.,  0.,  0.]]), array([[ 0.,  0.]])]
>>> np.array(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (3) into shape (1)

标签: pythonnumpy

解决方案


我将提出问题的解决方案,但请考虑评论中所说的内容。拥有未对齐的 Numpy 数组会阻止大多数有用的操作发挥它们的魔力。考虑改用列表。

话虽如此,确实是奇怪的错误。我通过在基本的 for 循环中分配而不是使用np.array调用来完成工作。

a = [2,1,1]
b = np.zeros(len(a)-1, dtype=object)
for i in range(1, len(a)):
    b[i-1] = np.zeros((a[i], a[i - 1] + 1))

结果:

>>> b
array([array([[0., 0., 0.]]), array([[0., 0.]])], dtype=object)

推荐阅读