【问题标题】:Efficiently rotate a set of points with a rotation matrix in numpy在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 大约是几千。

【问题讨论】:

    标签: python numpy rotation vectorization


    【解决方案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)
      

      【讨论】:

        猜你喜欢
        • 2014-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多