Numpy docs讲述了乘积运算符和矩阵运算符之间的区别。
与许多矩阵语言不同,乘积运算符 * 运算 NumPy 数组中的元素。矩阵乘积可以使用 @ 运算符(在 python >=3.5 中)或点
问题:按元素作用的运算符与在矩阵上作用的运算符有什么区别?
这会如何改变结果?
假设我们有两个矩阵:
a = [ p q ]
[ r s ]
b = [ w x ]
[ y z ]
逐元素乘积意味着:
a * b = [ p*w q*x ]
[ r*y s*z ]
矩阵乘积意味着:
a @ b = [ (p*w)+(q*y) (p*x)+(q*z) ]
[ (r*w)+(s*y) (r*x)+(s*z) ]
当数学、机器学习等文献谈到“矩阵乘法”时,这个矩阵乘积就是这个意思。 请注意,
a @ b
与 b @ a
不同。
这是绝对正确的,但我们可以在这里看另一个例子https://matlabacademy.mathworks.com/R2024a/portal.html?course=gettingstarted#chapter=6&lesson=1§ion=1
正如我们所见, z = [3 4] * [10 20] 给出了一个“错误生成的结果”,因为内部维度不明确,为了解决这个问题,我们使用“.”,即“逐元素”乘法”。 例如,z = [3 4] . [10 20] 给出 z = 30 80 与仅使用“*”运算符的错误结果不同。