我有一个相机矩阵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 (使用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呢?我怎么才能解决这个问题?
发布于 2018-01-13 07:50:57
您对*操作符的理解是有缺陷的。它不执行点积。而是在这两个数组(也称为Hadamard积 )上执行元素乘法。
因此,如果有两个二维数组,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]])这就是你之前得到的。
https://stackoverflow.com/questions/48237906
复制相似问题