Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python矩阵逆_Python_Arrays_Numpy_Matrix Inverse - Fatal编程技术网

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数组,也可以说是矩阵:)