Python numpy 矩阵乘法multiply()、dot()、 matmul()、' * '、'@'辨析
https://blog.csdn.net/u011851421/article/details/83783826
在NumPy中,有几种用于进行矩阵乘法的方法,包括multiply()
, dot()
, matmul()
, ' * ', 以及 '@'。它们之间的区别如下:
- multiply():
numpy.multiply(a, b, out=None)
- 返回一个数组,该数组是参数a和b的元素级乘积。
- 这是一种逐元素相乘的操作,而不是矩阵乘法。
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
result = np.multiply(a, b)
# Output:
# array([[ 5, 12],
# [21, 32]])
- dot():
numpy.dot(a, b, out=None)
- 对于二维数组,它计算的是两个矩阵的点积,对于多维数组,它计算的是最后一个维度的点积。
- 对于二维数组,它等价于矩阵乘法。对于一维数组,它是内积。
- 当处理多维数组时,可以使用
np.tensordot()
来更清晰地表示。
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
result = np.dot(a, b)
# Output:
# array([[19, 22],
# [43, 50]])
- matmul():
numpy.matmul(a, b, out=None)
- 对于二维数组,它计算的是两个矩阵的点积,对于多维数组,它计算的是最后两个维度的点积。
- 对于高维数组,推荐使用
np.matmul()
以保持代码的清晰度。
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
result = np.matmul(a, b)
# Output:
# array([[19, 22],
# [43, 50]])
- ' * ' (运算符):
- 对于NumPy数组,
*
运算符执行的是逐元素乘法,而不是矩阵乘法。
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
result = a * b
# Output:
# array([[ 5, 12],
# [21, 32]])
- '@' (运算符):
- 与
np.dot()
和np.matmul()
一样,@
用于矩阵乘法。
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
result = a @ b
# Output:
# array([[19, 22],
# [43, 50]])
总结:
- 对于矩阵乘法,可以使用
np.dot()
,np.matmul()
, ' * ' 或者 '@'。 - 如果你要进行逐元素的乘法(而不是矩阵乘法),可以使用
np.multiply()
或者 ' * ' 运算符。