在处理 numpy 数组时,运算符 "numpy.dot()"、“*”和“@”之间有什么区别?

What is the difference between operators "numpy.dot()", " * " and "@" when working on numpy arrays?

我想用 python 求解方程 x+6y−z=0、x+2y−2z=1、−5x+2z=8。 我尝试使用不同的乘法运算来乘法矩阵,当不同的乘法运算时答案是不同的used.I想知道这个的原因。

import numpy as np

a= np.array([[2,6,-1],[1,2,-2],[-5,0,2]])
b= np.array([0,1,8])
a_inv= np.linalg.inv(a)
#case1
c= np.dot(a_inv,b)
print(c.shape)
#case2
print((a_inv@b).shape)
#case3
print((a_inv*b).shape)

case1 和 case2 给出了正确的输出,但 case3 没有。 输出: 情况1: (3,) 案例2: (3,) 案例三: (3, 3)

numpy 中的 * 运算符不同于矩阵乘法。当您执行 a_inv * b (在您的情况下)时,您正在创建一个 3x3 数组,如下所示:

[[a[0,0] * b[0], a[0,1] * b[0], a[0,2] * b[0]],
 [a[1,0] * b[1], a[1,1] * b[1] ...]] #etc.

除了 dot 之外,您还可以使用 np.matmul(a_inv, b) 进行矩阵乘法,或者您可以使用 np.matrix:

明确告诉 numpy 您的数组是矩阵
a_inv = np.matrix(a_inv)
b = np.matrix(b).T   # note that b will be a row vector, so you need to transpose it to make it a column vector
a_inv * b   #now numpy will interpret '*' as matrix multiplication
>>[[-2. ]
 [ 0.5]
 [-1. ]]