numpy.multiply总是等同于*运算符吗?

时间:2018-03-30 03:02:01

标签: python arrays numpy matrix-multiplication vector-multiplication

numpy.multiply documentation说:

  

就阵列广播而言,相当于x1 * x2。

np.multiply(x1, x2)在任何情况下都与x1 * x2不同吗?

我会在哪里找到每个的实现?

注意:analogous question exists for division但是它没有提及乘法,也没有暗示在乘法情况下答案是相同的。

这个问题还要求有关乘法的具体实现细节。

2 个答案:

答案 0 :(得分:3)

补充@COLDSPEED的答案我想强调,对于非数组操作数,结果实际上可能完全不同:

>>> import numpy as np
>>> 
>>> 2 * [1, 2]
[1, 2, 1, 2]
>>> np.multiply(2, [1, 2])
array([2, 4])

答案 1 :(得分:2)

是的,np.multiply和乘法运算符*一致地为ndarray个对象工作。

In [560]: x = np.array([1, 2, 3])

In [561]: y = np.array([4, 5, 6])

In [562]: x * y
Out[562]: array([ 4, 10, 18])

In [563]: np.multiply(x, y)
Out[563]: array([ 4, 10, 18])

唯一的主要区别在于matrix个对象,为此,*设置为执行矩阵乘法(即点积)。

In [564]: x, y = map(np.matrix, (x, y))

In [565]: np.multiply(x, y)
Out[565]: matrix([[ 4, 10, 18]])

In [566]: x * y
ValueError: shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)

另外,正如@PaulPanzer在他的回答中提到的,当将纯python列表与标量相乘时,它们的行为会有所不同。