[英]Python matrix inverse
我有一個已經計算出的相機矩陣k
。 k
值為:
[[ 1.92160183e+08 0.00000000e+00 3.06056985e+02]
[ 0.00000000e+00 1.92160183e+08 1.57709172e+02]
[ 0.00000000e+00 0.00000000e+00 1.00000000e+00]]
現在,我嘗試使用numpy(使用np.linalg.inv(k)
)找到k
的逆。 令k1
為k
的倒數。
使用numpy, k*k1
值為:
[[ 1.00000000e+00 0.00000000e+00 -4.87462472e-04]
[ 0.00000000e+00 1.00000000e+00 -1.29434633e-04]
[ 0.00000000e+00 0.00000000e+00 1.00000000e+00]]
現在,我期待一個完美的身份矩陣,但是由於應該為零的值非常小,因此我決定忽略一個事實,即結果不是一個完美的身份矩陣。
現在我的問題是:我還有另外兩個矩陣R
和h
。 R
是一個單位矩陣(它並不總是單位矩陣,但為簡單起見,假定為單位)。 我需要執行H1 = k*R*k1*h
。 理想情況下,這應該將h的值分配給H1(因為k*R*k1
應該是同一性)。
我原來的h矩陣:
[[ 1.71025842e+00 -7.51761942e-01 1.02803446e+02]
[ -2.98552735e-16 1.39232576e-01 1.62792482e+02]
[ -1.13518150e-18 -2.27094753e-03 1.00000000e+00]]
我的R矩陣:
[[ 1. 0. 0.]
[ 0. 1. -0.]
[-0. 0. 1.]]
的值H1
使用產生H1 = k*R*k1*h
:
[[ 1.71025842 -0. -0. ]
[-0. 0.13923258 0. ]
[ 0. -0. 1. ]]
的值H1
使用產生H1 = k*k1*h
:
[[ 1.71025842 -0. -0.05011282]
[-0. 0.13923258 -0.02107099]
[-0. -0. 1. ]]
為什么H1
的值不應該等於h
? 我怎樣才能解決這個問題?
您對*
運算符的作用的理解存在缺陷。 它不執行點積。 而是在兩個數組上執行元素逐乘法 ,也稱為Hadamard乘積 。
因此,如果您有兩個2D數組A
和B
,則點積將使用-
而hadamard產品看起來像這樣-
這是一個元素乘法(以及您當前正在執行的操作)。 嘗試用對np.ndarray.dot
的調用或使用@
運算符替換它:
>>> k.dot(k1)
要么,
>>> k @ k1 # python3.5+
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
將其與-
>>> k * k1
array([[ 1.00000000e+00, 0.00000000e+00, -4.87462473e-04],
[ 0.00000000e+00, 1.00000000e+00, -1.29434634e-04],
[ 0.00000000e+00, 0.00000000e+00, 1.00000000e+00]])
這是您早些時候得到的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.