在Python上反转奇异矩阵

时间:2018-09-12 07:09:28

标签: python scipy

我必须从csv个文件中读取多个数据,而当我想从csv个数据中转换矩阵时,会得到以下信息:

numpy.linalg.linalg.LinAlgError: singular matrix

并且该过程陷入了本节:

J = np.mat([dtdx,dtdy,dtdz]).transpose()
dd = np.mat(ttcal-tt)
dm = (scipy.linalg.inv(J.transpose()*J))*((J.transpose())*(dd.transpose()))

和来自“ J”的数据是这样的:

[[-6.81477651e-03 -7.90320450e-03  6.50533437e-05]
 [-6.71080644e-03 -6.00135428e-03  6.50533437e-05]]

和“ dd”中的数据是这样的:

[[0.00621772 0.00537531]]

我检查了这些数据,发现了:

tes = J.transpose()*J

和这样的结果:

[[ 9.14761019e-05  9.41324993e-05 -8.79884397e-07]
 [ 9.41324993e-05  9.84768945e-05 -9.04538042e-07]
 [-8.79884397e-07 -9.04538042e-07  8.46387506e-09]]

我需要求逆这个矩阵,但是这个数据是奇异矩阵。我必须尝试在matlab r2017b上运行良好。

我需要在python上解决此问题。

2 个答案:

答案 0 :(得分:2)

您是否尝试过使用pseudo-inverse numpy.linalg.pinv?应该处理这些情况。

B = np.linalg.pinv(a)

但是我建议检查一下您是否确实正确计算了矩阵,并且应该出现一个奇异矩阵。

答案 1 :(得分:1)

如果您确定所进行的计算是正确的并且正是您想要的,那么您可以为所拥有的奇异矩阵求一个伪逆。

可以用python这样完成。.

mat = np.array([[ 9.14761019e-05,  9.41324993e-05, -8.79884397e-07],
 [ 9.41324993e-05,  9.84768945e-05, -9.04538042e-07],
 [-8.79884397e-07, -9.04538042e-07,  8.46387506e-09]])

p_inv = np.linalg.pinv(mat)

print(p_inv)

# output

array([[-1.00783988e+13,  5.50963966e+11, -9.88844703e+14],
       [ 5.50963966e+11, -3.01194390e+10,  5.40580308e+13],
       [-9.88844703e+14,  5.40580308e+13, -9.70207468e+16]])