使用numpy中的旋转矩阵有效地旋转一组点

时间:2012-08-27 19:30:58

标签: python numpy rotation vectorization

我有一个存储在numpy数组A中的形状为(N,3)的3D点和一个形状为R的旋转矩阵(3,3)的列表。我想在R.x就地计算x的每个点A的点积。天真我能做到这一点:

for n in xrange(N):
    A[n,:] = dot(R, A[n,:]) 

有没有办法通过本地numpy调用来对此进行矢量化?如果重要的话,N就是几千的订单。

2 个答案:

答案 0 :(得分:25)

您可以将A乘以旋转矩阵的转置:

A = dot(A, R.T)

答案 1 :(得分:2)

在Aapo Kryola的(正确)答案中有几个小的更新/澄清点。首先,可以使用最近添加的矩阵乘法运算符def update(self, **kwargs): for key, value in kwargs.items(): setattr(self, key, value) 来稍微简化矩阵乘法的语法:

@

此外,您可以通过在乘法之前对A = A @ R.T 进行转置,然后对结果进行转置,以标准形式(首先是旋转矩阵)来安排转换:

A

您可以通过以下声明来检查两种转换形式是否产生相同的结果:

A = (R @ A.T).T