使用
有什么不同import numpy as np
a, b = np.random([1024, 1024]), np.random([1024, 1024])
c = np.multiply(a, b)
在
c = a * b
或*
- numpy-arrays上的运算符是否只是用np.multiply
覆盖?
编辑 :此问题被标记为重复,因为a question询问有关除法运算符的相同内容(np.divide()
vs {{1} })和类似的答案紧随其后,但除非它改为" numpy arithmetic与python arithmetic"或类似的东西,它不会帮助人们想到和我一样的事情(关于乘法)而不是"聪明的"足以假设关于相关算术运算(除法)的问题推广到所有基本算术运算。致make it easier finding answers,我主张保持这个问题不变。
答案 0 :(得分:6)
没有区别。但是,np.multiply
函数可以使用其他可选参数,使其更加通用。请参阅docs。
说*
被np.multiply
覆盖不太准确。通常,*
映射到对其执行操作的对象的__mul__
和__rmul__
方法的调用。因此,*
会被np.ndarray.__mul__
“覆盖”。
答案 1 :(得分:3)
速度差异 - 无:
In [65]: timeit c = np.multiply(a,b)
4.95 ms ± 10.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [66]: timeit c = a*b
5.06 ms ± 180 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
对于较小的数组,我们可能会看到由于不同的调用堆栈而产生的差异,但是在这些情况下,实际的计算占主导地位。
但正如您从文档中看到的那样,np.multiply
是一个ufunc
,可以访问所暗示的所有机制。
对于np.matrix
个对象,*
是矩阵乘积,np.multiply
是元素乘法。