我有一个存储在 numpy 数组中的 3D 点列表,A
其中 shape(N,3)
和旋转矩阵R
shape (3,3)
。我想就地计算R.x
每个点x
的点积。A
天真地我可以这样做:
for n in xrange(N):
A[n,:] = dot(R, A[n,:])
有没有办法通过本机 numpy 调用对其进行矢量化?如果重要的话,N 大约是几千。
我有一个存储在 numpy 数组中的 3D 点列表,A
其中 shape(N,3)
和旋转矩阵R
shape (3,3)
。我想就地计算R.x
每个点x
的点积。A
天真地我可以这样做:
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)