我有一个存储在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就是几千的订单。
答案 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