在python上反转奇异矩阵

Wah*_*oto 0 python scipy

我必须从csv文件中读取多个数据,当我想从csv数据反转矩阵时,我得到了这个:

numpy.linalg.linalg.LinAlgError: singular matrix
Run Code Online (Sandbox Code Playgroud)

并且该过程卡在此部分:

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

来自“J”的数据如下:

[[-6.81477651e-03 -7.90320450e-03  6.50533437e-05]
 [-6.71080644e-03 -6.00135428e-03  6.50533437e-05]]
Run Code Online (Sandbox Code Playgroud)

来自“dd”的数据如下:

[[0.00621772 0.00537531]]
Run Code Online (Sandbox Code Playgroud)

我已经检查了这些数据,我发现了这一点:

tes = J.transpose()*J
Run Code Online (Sandbox Code Playgroud)

结果如下:

[[ 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]]
Run Code Online (Sandbox Code Playgroud)

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

我需要在python上解决这个问题。

Eyp*_*ros 5

您是否尝试过使用伪逆 numpy.linalg.pinv?它应该处理这些情况。

B = np.linalg.pinv(a)
Run Code Online (Sandbox Code Playgroud)

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