Python矩阵逆
我有一个我计算过的摄像机矩阵Python矩阵逆,python,arrays,numpy,matrix-inverse,Python,Arrays,Numpy,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]] [[ 1.00000000e+00 0.00000000e+00 -4.87462472e-04] [ 0.0000
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]]
[[ 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]]
现在,我已经尝试使用numpy(使用np.linalg.inv(k)
)找到k
的倒数。让k1
与k
相反
使用numpy,k*k1
的值为:
[[ 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]]
[[ 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=k*R*k1*h
生成的H1
值:
[[ 1.71025842 -0. -0. ]
[-0. 0.13923258 0. ]
[ 0. -0. 1. ]]
[[ 1.71025842 -0. -0.05011282]
[-0. 0.13923258 -0.02107099]
[-0. -0. 1. ]]
使用H1=k*k1*h
生成的H1
值:
[[ 1.71025842 -0. -0. ]
[-0. 0.13923258 0. ]
[ 0. -0. 1. ]]
[[ 1.71025842 -0. -0.05011282]
[-0. 0.13923258 -0.02107099]
[-0. -0. 1. ]]
为什么
H1
的值不应该等于h
?我怎样才能解决这个问题 您对*
操作员所做工作的理解是有缺陷的。它不执行点积。而是对两个数组执行元素相乘,也称为
因此,如果有两个二维数组,A
和B
,则点积的计算公式为-
鉴于,hadamard产品如下所示-
这是一个元素级乘法(以及您当前正在做的事情)。尝试用调用np.ndarray.dot
或使用@
运算符替换此选项:
>>> k.dot(k1)
或者
将此与-
>>> 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]])
这就是你之前得到的 根据定义,矩阵是二维的。因此,使用术语2D矩阵是多余的。可以说是2D数组,也可以说是矩阵:)