在将numpy数组与其他两个numpy数组组成元素时出现广播错误
问题内容:
我正在尝试生成一个具有两个其他numpy数组的元素的numpy数组,如下所示。
W1b1 = np.zeros((256, 161))
W2b2 = np.zeros((256, 257))
Wx = np.array([W1b1, W2b2], dtype=np.object)
这给出了一个错误:
ValueError: could not broadcast input array from shape (256,161) into shape (256).
但是,如果我为W1b1和W2b2采取完全不同的尺寸,那么我不会收到错误,如下所示。
A1 = np.zeros((256, 161))
A2 = np.zeros((257, 257))
A3 = np.array([A1, A2], dtype=np.object)
我没有明白第一个代码中有什么问题,为什么numpy数组试图广播一个输入数组。
我试过以下版本(Python 2.7.6,Numpy 1.13.1)和(Python 3.6.4,Numpy 1.14.1)。
问题答案:
不要指望np.array(..., object)
正确的对象数组。目前,我们无法控制其制作的尺寸。可以想象它可以制作一个(2,)数组或(2,256)(具有1d内容)。有时会起作用,有时会引发错误。有某种模式,但是我还没有看到对代码的分析以显示出正在发生的事情。
现在,分配数组并填充它更安全:
In [57]: arr = np.empty(2, object)
In [58]: arr[:] = [W1b1, W2b2]
np.array([np.zeros((3,2)),np.ones((3,4))], object)
也引发此错误。因此,当第一个尺寸匹配但第二个尺寸不匹配时,就会出现错误。现在,我开始思考,我之前已经看到过此错误。
关于该主题的早期SO问题
numpy array
1.9.2获取ValueError:无法将输入数组从形状(4,2)广播到形状(4)