Python矩阵求逆

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 的倒数。设 k1k.

的倒数

使用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]]

现在,我期待一个完美的单位矩阵,但由于应该为零的值非常小,我决定忽略结果不是一个完美的单位矩阵这一事实。

现在我的问题是:我还有另外两个矩阵 RhR 是单位矩阵(它并不总是单位矩阵,但为简单起见假设如此)。我需要执行 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.        ]]

使用H1 = k*k1*h生成的H1的值:

[[ 1.71025842 -0.         -0.05011282]
 [-0.          0.13923258 -0.02107099]
 [-0.         -0.          1.        ]]

为什么 H1 的值没有达到应有的 h?我怎样才能解决这个问题?

您对 * 运算符作用的理解存在缺陷。它不执行点积。而是对两个数组执行 元素乘法 ,也称为 Hadamard product.

因此,如果您有两个二维数组,AB,则点积的计算方式为 -

然而,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]])

这是你之前得到的。