我必须从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上解决此问题。
答案 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]])