在将numpy数组与其他两个numpy数组组成元素时出现广播错误

时间:2018-06-23 23:00:41

标签: python arrays numpy concatenation broadcast

我正在尝试生成一个包含两个其他numpy数组的元素的numpy数组,如下所示。

W1b1 = np.zeros((256, 161)) W2b2 = np.zeros((256, 257)) Wx = np.array([W1b1, W2b2], dtype=np.object)

这将导致错误:ValueError:无法将输入数组从形状(256,161)广播到形状(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)。

1 个答案:

答案 0 :(得分: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)也会引发此错误。因此,当第一个尺寸匹配但第二个尺寸不匹配时,就会出现错误。现在,我开始思考,我之前已经看过这个错误。

有关该主题的早期问题

numpy array 1.9.2 getting ValueError: could not broadcast input array from shape (4,2) into shape (4)

Creation of array of arrays fails, when first size of first dimension matches

Creating array of arrays in numpy with different dimensions