当前位置:   article > 正文

ValueError: operands could not be broadcast together with shapes、numpy广播错误_发生异常: valueerror operands could not be broadcast t

发生异常: valueerror operands could not be broadcast together with shapes (3

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

问题

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

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

解决方案

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

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

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

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

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

  1. np.logaddexp(M, a[:, np.newaxis])
  2. ******************************************************************************
  3. array([[ 1.31326169, 1.31326169],
  4. [ 1.69314718, 1.69314718],
  5. [ 2.31326169, 2.31326169]])

完整错误日志

  1. ---------------------------------------------------------------------------
  2. ValueError Traceback (most recent call last)
  3. <ipython-input-219-f2cda6cbe81d> in <module>
  4. 2 a = np.arange(3)
  5. 3
  6. ----> 4 M+a
  7. ValueError: operands could not be broadcast together with shapes (3,2) (3,)

参考:Computation on Arrays: Broadcasting

参考:Python Data Science Handbook

参考:Numpy的广播机制

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号