numpy.multiply文档说:
就数组广播而言,相当于 x1 * x2。
在任何情况下都np.multiply(x1, x2)
不同吗?x1 * x2
我在哪里可以找到每个的实现?
注意:除法存在一个类似的问题,但它没有提到乘法,也没有暗示在乘法的情况下答案是相同的。
这个问题还要求提供特定于乘法的实现细节。
numpy.multiply文档说:
就数组广播而言,相当于 x1 * x2。
在任何情况下都np.multiply(x1, x2)
不同吗?x1 * x2
我在哪里可以找到每个的实现?
注意:除法存在一个类似的问题,但它没有提到乘法,也没有暗示在乘法的情况下答案是相同的。
这个问题还要求提供特定于乘法的实现细节。
补充@COLDSPEED 的答案我想强调的是,对于非数组操作数,结果实际上可能完全不同:
>>> import numpy as np
>>>
>>> 2 * [1, 2]
[1, 2, 1, 2]
>>> np.multiply(2, [1, 2])
array([2, 4])
是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 列表与标量相乘时,它们的行为不同。