假设我有两个X
,Y
形状k,1,n
和k,m,n
的对象。我知道当我执行X
等操作时,numpy会自动沿第一维扩展/重复X + Y
。这种魔法是否适用于numpy中支持/包含的所有数学运算?
例如,我可以scipy.special.binom(X,Y)
获得预期结果吗?我尝试了一些特殊功能,但我没有收到错误。没有收到错误让我得出结论广播是否正确完成了?
答案 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.dot
是numpy
功能的示例,其中广播不适用。