Numpy np.multiply vs * -Operator

时间:2018-03-26 14:08:59

标签: python numpy

使用

有什么不同
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,我主张保持这个问题不变。

2 个答案:

答案 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是元素乘法。