簡體   English   中英

在Python上反轉奇異矩陣

[英]invert singular matrix on python

我必須從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上解決此問題。

您是否嘗試過使用偽逆數 numpy.linalg.pinv 應該處理這些情況。

B = np.linalg.pinv(a)

但我建議檢查一下您是否確實正確計算了矩陣,並且應該出現一個奇異矩陣。

如果您確定所進行的計算是正確的並且正是您想要的,那么您可以為所擁有的奇異矩陣求一個偽逆。

可以像這樣在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]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM