ValueError:无法将形状(25,1)的输入数组广播为形状(25)

时间:2018-01-22 00:35:57

标签: python arrays numpy valueerror

当我尝试运行这段简单的代码片段时

a= 2

G = np.random.rand(25,1)
H = np.zeros((25,a))

for i in range(a):
    H[:,i] = .5 * G 

我收到了

ValueError: could not broadcast input array from shape (25,1) into shape (25). 

我想知道是否有人可以指出这个问题的解决方案?

我知道它在图像处理中发生了很多,但是这一点,我不知道如何规避。

干杯。

1 个答案:

答案 0 :(得分:1)

要解决此问题,请使用G的第一列:

for i in range(a):
    H[:,i] = .5 * G[:, 0]

Numpy广播基本上试图通过从最后一个维度开始并移动到第一个维度来匹配数组的维度(在广播时)。在这种情况下,G(1)的第二维被广播到25(H[:, i]的第一维和唯一维.G的第一维与任何东西都不匹配。你可以阅读更多关于numpy广播规则{{3 }}

注意:您确实不需要for循环。 H只有G列重复两次。您可以通过各种方式实现这一目标(例如herenp.tile等)

H = np.tile(G / 2, 2)