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

点点圈 提交于 2019-12-30 11:36:05

问题


I am trying to generate a numpy array with elements as two other numpy arrays, as below.

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

this gives an error:

ValueError: could not broadcast input array from shape (256,161) into shape (256).

However, if I take entirely different dimensions for of W1b1 and W2b2 then I do not get an error, as below.

A1 = np.zeros((256, 161))
A2 = np.zeros((257, 257))
A3 = np.array([A1, A2], dtype=np.object)

I do not get what is wrong in the first code and why is numpy array trying to broadcast one of the input arrays.

I have tried on below versions (Python 2.7.6, Numpy 1.13.1) and (Python 3.6.4, Numpy 1.14.1).


回答1:


Don't count on np.array(..., object) making the right object array. At the moment we don't have control over how many dimensions it makes. Conceivably it could make a (2,) array, or (2, 256) (with 1d contents). Sometimes it works, sometimes raises an error. There's something of a pattern, but I haven't seen an analysis of the code that shows exactly what is happening.

For now it is safer to allocate the array, and fill it:

In [57]: arr = np.empty(2, object)
In [58]: arr[:] = [W1b1, W2b2]

np.array([np.zeros((3,2)),np.ones((3,4))], object) also raises this error. So the error arises when the first dimensions match, but the later ones don't. Now that I think about, I've seen this error before.

Earlier SO questions on the topic

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



来源:https://stackoverflow.com/questions/51005699/broadcasting-error-when-forming-numpy-array-with-elements-as-two-other-numpy-arr

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!