2017-06-05 37 views
0

我有三個數據通道。通道表示x,y和z座標。例如,對於一個點的x位置被存儲在信道1,信道2等如何有效地應用轉變爲多渠道numpy的ndarray?

y位置我想執行這些頻道中表示的每個點的變換。也就是說,我想用變換矩陣在每個u,v位置乘以x,y和z。當然,我可以手動迭代每個u,v位置並提取位置數據。我覺得這不是最有效的方法。

我的問題是,轉換點集合的最有效方法是什麼?在哪裏位置數據存儲在對應於每個維度的通道中?

+0

嘲笑了一些數據。這是一個平坦的記錄陣列嗎? M-通過-N×3? –

回答

1

你描述的是一個簡單的矩陣乘法:

raw = numpy.array([ [1, 10, 100], [2, 20, 200], [3, 30, 300], [4, 40, 400] ]) 
transformation = numpy.matrix([ [1, 0, 0], [0, 0, 1], [0, -1, 0] ]) 
transformed = raw * transformation 

也許你的數據比這個M-數據點按-3-「通道」例如高維?目前還不清楚你的意思是uv,但他們提出的問題可能會更高維。如果是這樣,你可以調查numpy.tensordotnumpy.einsum,這允許將矩陣乘法推廣到更高維度,或者可以將raw設置爲view,然後將reshape降至M-3(然後撤消通過重塑transformed回你想要的方式)結束。