在numpy中使用旋转矩阵有效地旋转一组点
Posted
技术标签:
【中文标题】在numpy中使用旋转矩阵有效地旋转一组点【英文标题】:Efficiently rotate a set of points with a rotation matrix in numpy 【发布时间】:2012-08-22 07:36:38 【问题描述】:我有一个 3D 点列表,存储在 numpy 数组 A
中,形状为 (N,3)
,旋转矩阵 R
,形状为 (3,3)
。我想就地计算A
中每个点x
的点积R.x
。天真地我可以这样做:
for n in xrange(N):
A[n,:] = dot(R, A[n,:])
有没有办法通过本机 numpy 调用对其进行矢量化?如果重要的话,N 大约是几千。
【问题讨论】:
【参考方案1】:在 Aapo Kyrola 的(正确)答案中添加了一些小的更新/澄清点。首先,使用最近添加的矩阵乘法运算符@
可以稍微简化矩阵乘法的语法:
A = A @ R.T
此外,您可以通过在乘法之前对A
进行转置,然后转置结果,以标准形式(首先是旋转矩阵)安排转换:
A = (R @ A.T).T
您可以通过以下断言检查两种形式的转换是否产生相同的结果:
np.testing.assert_array_equal((R @ A.T).T, A @ R.T)
【讨论】:
【参考方案2】:您可以将 A 与旋转矩阵的转置相乘:
A = dot(A, R.T)
【讨论】:
以上是关于在numpy中使用旋转矩阵有效地旋转一组点的主要内容,如果未能解决你的问题,请参考以下文章