ValueError: operands could not be broadcast together with shapesnumpy广播错误

Posted Data+Science+Insight

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ValueError: operands could not be broadcast together with shapesnumpy广播错误相关的知识,希望对你有一定的参考价值。

ValueError: operands could not be broadcast together with shapes、numpy广播错误

问题

# 不符合numpy的广播规则,触发了计算错误。两个向量或者矩阵维度不同,没法进行按位的运算;

M = np.ones((3, 2))
a = np.arange(3)

M+a

解决方案

#查看np.newaxis进行维度扩增后的shape

a[:, np.newaxis].shape
(3, 1)

# 使用np.newaxis进行维度扩增,之后就符合了numpy的广播规则,就可以进行运算

M + a[:, np.newaxis]
array([[ 1.,  1.],
       [ 2.,  2.],
       [ 3.,  3.]])

还要注意,虽然我们在这里一直关注+运算符,但这些广播规则适用于任何二进制UFUNC。例如,下面是logaddexp(a,b)函数,它计算log(exp(a)+exp(b))的精度比简单方法高。

np.logaddexp(M, a[:, np.newaxis])

******************************************************************************

array([[ 1.31326169,  1.31326169],
       [ 1.69314718,  1.69314718],
       [ 2.31326169,  2.31326169]])

完整错误日志

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-219-f2cda6cbe81d> in <module>
      2 a = np.arange(3)
      3 
----> 4 M+a

ValueError: operands could not be broadcast together with shapes (3,2) (3,) 

参考:Computation on Arrays: Broadcasting

参考:Python Data Science Handbook

参考:Numpy的广播机制

以上是关于ValueError: operands could not be broadcast together with shapesnumpy广播错误的主要内容,如果未能解决你的问题,请参考以下文章

numpy vectorize np.prod 无法构造超过 32 个操作数的 ufunc

PHP Humaniser l'affichagededuréesécoulées

真机测试 iOS -- Coule not find Developer Disk Image

C语言错误:left operand must be l-value

php 求商数和余数 的函数

错误:ER_OPERAND_COLUMNS:操作数应包含 1 列