numpy广播* all *的所有功能?

时间:2015-06-07 20:23:16

标签: python numpy scipy

假设我有两个XY形状k,1,nk,m,n的对象。我知道当我执行X等操作时,numpy会自动沿第一维扩展/重复X + Y。这种魔法是否适用于numpy中支持/​​包含的所有数学运算?

例如,我可以scipy.special.binom(X,Y)获得预期结果吗?我尝试了一些特殊功能,但我没有收到错误。没有收到错误让我得出结论广播是否正确完成了?

1 个答案:

答案 0 :(得分:6)

numpy确实为所有运营商应用广播,例如。 * + - /等。它尽可能适用于ufunc个函数。这是ufunc定义的一部分。

scipy.special.binom根据其文档a ufunc。它已编译,所以我无法查看代码来验证这一点,但我可以做一些简单的测试:

In [379]: special.binom([1,2,3],[[1],[2]])
Out[379]: 
array([[ 1.,  2.,  3.],
       [ 0.,  1.,  3.]])

In [380]: special.binom([1,2,3,4],[[1],[2]])
Out[380]: 
array([[ 1.,  2.,  3.,  4.],
       [ 0.,  1.,  3.,  6.]])

In [385]: special.binom(np.arange(6).reshape(3,2,1),np.arange(6).reshape(3,1,2)).shape
Out[385]: (3, 2, 2)

(2,3)和(2,4)输出尺寸与广播输入相匹配。这与广播一致。

np.dotnumpy功能的示例,其中广播不适用。