通过旋转矩阵阵列旋转矢量数组

时间:2016-03-30 10:35:10

标签: python numpy scipy vectorization

如果我们有一个3 x 3旋转矩阵R,它可以乘以v,一个3 x N数组 - 一个N列向量数组 - 生成一个新的3 x N旋转向量数组,如下所示:

v_rotated = R.dot(v)

现在假设我们有一个N x M x 3数组,NM个向量,我想用N个不同的3 x 3个旋转矩阵进行旋转(一次旋转)每个“行”向量的矩阵)。这对循环来说很简单,但是有一种更快,更紧凑(矢量化)的方法,例如,使用numpy的{​​{1}}或dot

循环实现的示例代码:

tensorproduct

1 个答案:

答案 0 :(得分:5)

我们假设v.shape(N, M, 3)R.shape(N, 3, 3), 你可以使用np.einsum

import numpy as np
rotated_v = np.einsum('lij, lkj->lki', R, v)

其中lN上的索引,ij3x3轮换维度上的索引,kM上的索引。

我将结果与您的结果相符:

>>> print np.allclose(my_rotated_v, your_rotated_v)
True