簡體   English   中英

使用numpy中的旋轉矩陣有效旋轉一組點

[英]Efficiently rotate a set of points with a rotation matrix in numpy

我有一個存儲在形狀為(N,3) numpy 數組A中的 3D 點列表和形狀為(3,3)的旋轉矩陣R 我想就地計算A中每個點xRx點積。 我天真地可以這樣做:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM