ValueError: 操作数无法与形状 (5,) (30,) 一起广播

Posted

技术标签:

【中文标题】ValueError: 操作数无法与形状 (5,) (30,) 一起广播【英文标题】:ValueError: operands could not be broadcast together with shapes (5,) (30,) 【发布时间】:2018-04-25 17:28:06 【问题描述】:

我正在尝试像这样合并数组:

如果:

a = [1.2, 1, 3, 4]
b = [0.0 , 0.0]
c = [0.0 , 0.0]
a = a + b + c

那么结果应该是:

[0.0 , 0.0 , 1.2 , 1 ,3 ,4 , 0.0 ,0.0]

我所做的是提取数组的直方图 并将其与普通数组合并。

x1, bins, patch = plt.hist(array1, bins = round(max(array1) - min(array1)))
x1 = b + x1 + c

but the form of x1 is 
x1 = [  2.   0.   0.   1.   0.   2.   5.   0.   1.   1.   0.   1.   5.]

也许这会导致这样的错误

请帮助我。 我不知道该怎么办

【问题讨论】:

你的例子是 a=b+a+c 吗? 【参考方案1】:

您可以使用 np.concatenate 来执行此操作,但您也可以通过将数组转换为列表来执行此操作。

import numpy as np

a = list(np.array([1.2, 1, 3, 4]))
b = list(np.array([0.0 , 0.0]))
c = list(np.array([0.0 , 0.0]))
D= a + b + c

所以在你的代码中尝试:

x1 = list(b) + list(x1) + list(c)

#Put it back into a numpy array
x1 = np.array(x1)

【讨论】:

【参考方案2】:

NumPy 数组的行为与 + 运算符不同:对于 Python 列表,将列表相加意味着串联(这正是您想要的)。

但是,在 NumPy 中,将数组相加意味着逐元素相加(如果维度不匹配,则首先使用 broadcasting。

要获得您想要的,请使用np.concatenate,例如

import numpy as np
np.concatenate((b,x1,c))

【讨论】:

以上是关于ValueError: 操作数无法与形状 (5,) (30,) 一起广播的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:操作数无法与形状一起广播 (2501,201) (2501,)

如何修复Tensorflow中的“ValueError:操作数无法与形状(2592,)(4,)一起广播”?

ValueError:操作数无法与形状一起广播 - inverse_transform- Python

ValueError:在进行加权预测时,操作数无法与形状 (7,) (624,3) 一起广播

ValueError:操作数无法与形状一起广播(11,384)(96,)(11,384)

ValueError:无法为具有形状“(?,1)”的张量“Placeholder_1:0”提供形状(6165、5)的值