Python矩阵逆

标签 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]]

现在,我尝试使用 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,则点积的计算方式为 -

enter image description here

然而,hadamard 产品看起来像这样 -

enter image description here

这是逐元素乘法(以及您当前正在做的)。尝试将其替换为调用 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]])

这是你之前得到的。

关于Python矩阵逆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48237906/

相关文章:

python - 查找仅在第一个字典中出现的键值对

python - 为什么调用 fit 会重置 XGBClassifier 中的自定义目标函数?

python - 什么是 URL 参数? (urlparse 结果中位置 #3 的元素)

arrays - 如何比较两个数组包含相同的项目或不包含在 groovy 中?

python - 如何逐个元素地查找哪个 numpy 数组包含最大值?

python - numpy数组的快速条件重叠窗口(框架)

python - Pandas:从多列中删除 NaN 并将它们转换为 int 的最佳方法

java - Java 中的数组声明和初始化

c++ - 找不到内存泄漏

python - 如何在 TensorFlow 中进行 Argsort?