2016-10-05 304 views
1

現在我有一個矩陣:test_projs和一個索引矩陣GT_index如何有效地獲得由另一個矩陣索引的子矩陣?

GT_index每一行的每個元素意味着test_projs中該行所需元素的索引。現在我想計算選定區域上每行的總和。

一個簡單的例子:

test_projs = pd.DataFrame({0:[1,2,3], 1:[4,5,6], 2:[7,8,9], 3:[1,3,5]}, index=[3,4,5]) 
GT_index = pd.DataFrame({0:[3,2,1], 1:[2,3,2], 2:[1,1,3]}, index=[3,4,5]) 
b = np.zeros(3) 
i = 0 
for (index1, row1),(index2,row2) in zip(test_projs.iterrows(),GT_index.iterrows()) : 
    b[i]=row1[row2].values.sum() 
    i+=1 
b 

和實施例的上面的結果是:

enter image description here

但它是緩慢的。你知道如何提高效率嗎?

+0

我刪除「MATLAB」的標籤,因爲這個問題是不是MATLAB相關。 – 2016-10-05 06:30:34

+0

你的代碼不適合我。你可以使用像'test_projs = pd.DataFrame({0:[1,2,3], 1:[4,5,6], 2:[7,8,9], 3: [1,3,5]},index = [3,4,5])'並添加所需的輸出? – jezrael

+0

@jezrael是的,我會給出這個例子。 –

回答

2

下面是使用NumPy陣列和fancy-indexing技術與它的方法 -

arr1 = test_projs.values 
arr2 = GT_index.values 
out = arr1[np.arange(arr2.shape[0]),arr2.T].sum(0) 
+0

非常感謝!你的解決方案比我的機器要快10倍! –