[英]Efficiently rotate a set of points with a rotation matrix in numpy
我有一个存储在形状为(N,3)
numpy 数组A
中的 3D 点列表和形状为(3,3)
的旋转矩阵R
。 我想就地计算A
中每个点x
的Rx
点积。 我天真地可以这样做:
for n in xrange(N):
A[n,:] = dot(R, A[n,:])
有没有办法用原生的 numpy 调用将其矢量化? 如果重要的话,N 大约是几千。
您可以将 A 与旋转矩阵的转置相乘:
A = dot(A, R.T)
有几个小的更新/澄清点要添加到 Aapo Kyrola 的(正确)答案中。 首先,可以使用最近添加的矩阵乘法运算符@
稍微简化矩阵乘法的语法:
A = A @ R.T
此外,您可以通过在乘法之前对A
进行转置,然后对结果进行转置,以标准形式(先旋转矩阵)排列变换:
A = (R @ A.T).T
您可以通过以下断言检查两种形式的转换是否产生相同的结果:
np.testing.assert_array_equal((R @ A.T).T, A @ R.T)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.