Rav*_*310 2 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]]
Run Code Online (Sandbox Code Playgroud)
现在,我试图找到k使用numpy(使用np.linalg.inv(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]]
Run Code Online (Sandbox Code Playgroud)
现在,我期待一个完美的单位矩阵,但由于应该为零的值非常小,我决定忽略这样一个事实,即结果不是一个完美的单位矩阵.
现在我的问题:我有其他两个矩阵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]]
Run Code Online (Sandbox Code Playgroud)
我的R矩阵:
[[ 1. 0. 0.]
[ 0. 1. -0.]
[-0. 0. 1.]]
Run Code Online (Sandbox Code Playgroud)
H1生产的价值使用H1 = k*R*k1*h:
[[ 1.71025842 -0. -0. ]
[-0. 0.13923258 0. ]
[ 0. -0. 1. ]]
Run Code Online (Sandbox Code Playgroud)
H1生产的价值使用H1 = k*k1*h:
[[ 1.71025842 -0. -0.05011282]
[-0. 0.13923258 -0.02107099]
[-0. -0. 1. ]]
Run Code Online (Sandbox Code Playgroud)
为什么H1不等于h它的价值呢?我怎样才能解决这个问题?
您对*操作员所做操作的理解存在缺陷.它不执行点积.但是在两个阵列上执行元素乘法,也称为Hadamard乘积.
所以,如果你有两个2D数组,A并且B点积用以下公式计算:
然而,hadamard产品看起来像这样 -
这是元素乘法(以及您目前正在做的事情).尝试通过调用np.ndarray.dot或使用@运算符替换它:
>>> k.dot(k1)
Run Code Online (Sandbox Code Playgroud)
要么,
>>> k @ k1 # python3.5+
Run Code Online (Sandbox Code Playgroud)
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
Run Code Online (Sandbox Code Playgroud)
与此形成鲜明对比 -
>>> 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]])
Run Code Online (Sandbox Code Playgroud)
这是你早些时候得到的.