Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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 Numpy矩阵组合_Python_Numpy_Rotation_Translation - Fatal编程技术网

Python Numpy矩阵组合

Python Numpy矩阵组合,python,numpy,rotation,translation,Python,Numpy,Rotation,Translation,我有一个旋转矩阵和平移向量作为对应的numpy对象。将它们组合成4x4变换矩阵的最佳方法是什么?是否有允许避免伪元素复制的函数 有很多方法可以做到这一点;这里有两个 您可以创建一个空的4x4阵列。然后,旋转矩阵和平移向量可以通过切片分配分别复制到4x4变换矩阵中。例如,R和t分别是旋转矩阵和平移向量 In [23]: R Out[23]: array([[ 0.51456517, -0.25333656, 0.81917231], [ 0.16196059, 0.966876

我有一个旋转矩阵和平移向量作为对应的numpy对象。将它们组合成4x4变换矩阵的最佳方法是什么?是否有允许避免伪元素复制的函数

有很多方法可以做到这一点;这里有两个

您可以创建一个空的4x4阵列。然后,旋转矩阵和平移向量可以通过切片分配分别复制到4x4变换矩阵中。例如,
R
t
分别是旋转矩阵和平移向量

In [23]: R
Out[23]: 
array([[ 0.51456517, -0.25333656,  0.81917231],
       [ 0.16196059,  0.96687621,  0.19727939],
       [-0.8420163 ,  0.03116053,  0.53855136]])

In [24]: t
Out[24]: array([ 1. ,  2. ,  0.5])
创建一个空的4x4数组
M
,并用
R
t
填充它

In [25]: M = np.empty((4, 4))

In [26]: M[:3, :3] = R

In [27]: M[:3, 3] = t

In [28]: M[3, :] = [0, 0, 0, 1]

In [29]: M
Out[29]: 
array([[ 0.51456517, -0.25333656,  0.81917231,  1.        ],
       [ 0.16196059,  0.96687621,  0.19727939,  2.        ],
       [-0.8420163 ,  0.03116053,  0.53855136,  0.5       ],
       [ 0.        ,  0.        ,  0.        ,  1.        ]])
或者,您可以使用诸如
numpy.hstack
numpy.vstack
等函数组合变换矩阵:

In [30]: M = np.vstack((np.hstack((R, t[:, None])), [0, 0, 0 ,1]))

In [31]: M
Out[31]: 
array([[ 0.51456517, -0.25333656,  0.81917231,  1.        ],
       [ 0.16196059,  0.96687621,  0.19727939,  2.        ],
       [-0.8420163 ,  0.03116053,  0.53855136,  0.5       ],
       [ 0.        ,  0.        ,  0.        ,  1.        ]])
请注意,
t[:,None]
(也可以拼写为
t[:,np.newaxis]
t.reformate(-1,1)
)创建了具有形状
(3,1)
t的二维视图。这使形状与调用
np.hstack
中的
M
兼容

In [55]: t[:, None]
Out[55]: 
array([[ 1. ],
       [ 2. ],
       [ 0.5]])

不用担心使用如此小的数组进行复制。当然,复制是需要的,但我想知道是否有可能使用一些numpy api使其更精确。