Numpy np.multiply vs*-Operator

Hon*_*ear 11 python numpy

使用有什么不同

import numpy as np

a, b = np.random([1024, 1024]), np.random([1024, 1024])
c = np.multiply(a, b)
Run Code Online (Sandbox Code Playgroud)

过度

c = a * b
Run Code Online (Sandbox Code Playgroud)

或者是*numpy-arrays上的-Operator只是被覆盖了np.multiply


编辑:这个问题被标记为重复,因为一个问题询问有关除法运算符(np.divide()vs/)和类似答案的相同的事情,但除非它被改为"numpy算术与python算术"或类似的东西,它赢了'帮助人们想到和我一样的事情(关于乘法)而不是"聪明"足以假设关于相关算术运算(除法)的问题推广到所有基本算术运算.为了更容易找到答案,我主张保持这个问题.

jmd*_*_dk 11

没有区别.但是,该np.multiply函数可以采用其他可选参数,使其更加通用.查看文档.

*被覆盖np.multiply不会非常精确.通常,*映射到对其作用的对象的调用__mul____rmul__方法.因此,*相当"覆盖"了np.ndarray.__mul__.

  • 值得注意的是, np.multiply 可用于非 numpy 数组: `[ x1, ..., xn ] * [y1, ..., yn]` 不起作用,但 `np.multiply ([ x1, ..., xn ] * [y1, ..., yn])` 确实如此。 (3认同)

hpa*_*ulj 7

速度差异 - 无:

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)
Run Code Online (Sandbox Code Playgroud)

对于较小的数组,由于不同的调用堆栈,我们可能会看到差异,但对于这些,实际计算支配了时间。

但你可以从文档看,np.multiply是一个ufunc有权限访问该暗示的所有机器。

对于np.matrix对象,*是矩阵乘积,np.multiply是元素乘法。