Numpy矩阵组合
Numpy matrix combination
我有一个旋转矩阵和平移向量作为相应的 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. ]])
或者您可以 assemble 具有 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.reshape(-1, 1)
)创建 t
的二维视图,形状为 (3, 1)
。这使得形状与 np.hstack
.
调用中的 M
兼容
In [55]: t[:, None]
Out[55]:
array([[ 1. ],
[ 2. ],
[ 0.5]])
我有一个旋转矩阵和平移向量作为相应的 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. ]])
或者您可以 assemble 具有 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.reshape(-1, 1)
)创建 t
的二维视图,形状为 (3, 1)
。这使得形状与 np.hstack
.
M
兼容
In [55]: t[:, None]
Out[55]:
array([[ 1. ],
[ 2. ],
[ 0.5]])