赞
踩
# 不符合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的广播机制
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。