23

我有一个存储在 numpy 数组中的 3D 点列表,A其中 shape(N,3)和旋转矩阵Rshape (3,3)。我想就地计算R.x每个点x的点积。A天真地我可以这样做:

for n in xrange(N):
    A[n,:] = dot(R, A[n,:]) 

有没有办法通过本机 numpy 调用对其进行矢量化?如果重要的话,N 大约是几千。

4

2 回答 2

34

您可以将 A 与旋转矩阵的转置相乘:

A = dot(A, R.T)
于 2012-08-27T19:41:25.070 回答
10

在 Aapo Kyrola 的(正确)答案中添加了一些小的更新/澄清点。首先,使用最近添加的矩阵乘法运算符可以稍微简化矩阵乘法的语法@

A = A @ R.T

A此外,您可以通过在乘法之前进行转置,然后转置结果来安排标准形式的转换(首先是旋转矩阵) :

A = (R @ A.T).T

您可以通过以下断言检查两种形式的转换是否产生相同的结果:

np.testing.assert_array_equal((R @ A.T).T, A @ R.T)
于 2018-12-09T11:02:18.963 回答