使用元素作为另外两个 numpy 数组形成 numpy 数组时出现广播错误

Broadcasting error when forming numpy array with elements as two other numpy arrays

我正在尝试生成一个 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 getting ValueError: could not broadcast input array from shape (4,2) into shape (4)