2013-06-21 78 views
1

我有一個2D numpy數組和一列索引列表,我希望計算numpy數組中相應的一維向量的總和。這可以通過for循環或通過列表理解來輕鬆完成,但我想知道是否可以對其進行矢量化。使用類似的代碼,我可以從矢量化中獲得大約40倍的加速比。向量化各種索引的numpy數組調用

這裏的示例代碼:

import numpy as np 
indices = [[1,2],[1,3],[2,0,3],[1]] 
array_2d = np.array([[0.5, 1.5],[1.5,2.5],[2.5,3.5],[3.5,4.5]]) 
soln = [np.sum(array_2d[x], axis=-1) for x in indices] 

(編輯):請注意,指數不(X,Y)座標array_2d,代替指數爲[0] = [1,2]表示在第一和第二array_2d中的向量(行)。索引中每個列表的元素數目可以變化。

這就是我希望能夠做到:

vectorized_soln = np.sum(array_2d[indices[:]], axis=-1) 

有誰知道是否有實現這一目標的任何方式?

+0

「indices」的最後一個元素應該是「[2]」嗎?其他元素的長度爲2. –

+0

我編輯了這篇文章,並解釋了一些索引代表的內容。最初是的,索引中的元素可以具有可變大小,但是對array_2d中的相應向量執行的操作應該同樣適用(如總和或平均值等),並輸出單個向量。 – irozada

回答

1

首先給所有,我覺得你在指數的第三個元素一個錯字...

最簡單的方式做到這一點是建立一個與sub_array指數的兩個數組:

i = np.array([1,1,2]) 
j = np.array([2,3,?]) 
sub_arr2d = array_2d[i,j] 

最後,你可以得到sub_arr2d的總和......

+0

這不是一個錯字,我編輯了一些帖子,以更好地解釋指數意味着什麼。我認爲你的建議不會與我的想法一致(希望現在寫得更好)。 – irozada