我必须从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上解决这个问题。
您是否尝试过使用伪逆 numpy.linalg.pinv?它应该处理这些情况。
B = np.linalg.pinv(a)
Run Code Online (Sandbox Code Playgroud)
但我建议检查你是否真的正确计算了你的矩阵,并且应该出现一个奇异矩阵。