【发布时间】:2020-04-03 18:21:28
【问题描述】:
我认为我应该使用两种方法(In[4] 和In[5])得到相同的结果。怎么了?我可以说正确的是In[5]。
In [1]: import numpy as np
In [2]: A = np.mat('1 2 3; 4 5 6; 7 8 9')
In [3]: B = np.mat('10;20;30')
In [4]: A.I*B
Out[4]:
matrix([[ 64.],
[-64.],
[ 16.]])
In [5]: np.linalg.solve(A,B)
Out[5]:
matrix([[-0.93333333],
[ 1.86666667],
[ 2.4 ]])
【问题讨论】:
-
矩阵 A = np.mat('1 2 3; 4 5 6; 7 8 9') 是奇异的,没有逆矩阵。你确定你做的是对的吗?
-
我会想到同样的事情,但 64 和 -0.9 之间的差异对于浮点错误来说似乎有点极端
-
更大的问题是上面矩阵的行列式应该为0,但是在矩阵类上调用
np.linalg.det,却给出了一个很小的浮点数,这意味着它不会在矩阵求逆时引发。当我在等效数组上调用相同的函数时,我正确地得到 0。