2016-05-27 245 views
2

我正在尋求幫助來改進我的代碼。我有兩個不同大小的數組,我將一個數組的值分配給另一個數組的索引。 例如如何匹配兩個數組的元素並返回值

a = np.array([[1,5],[2,8],[3,2],[4,6]]) 
b = np.array([[1],[1],[2],[4],[4],[2],[3],[2],[3]]) 

即時mathching在第一列然後從分配的到B中的對應的行的第二列中的值的項目。

c = np.zeros([len(b),1]) 
for i in tqdm(range(len(b))): 
    for j in range(len(a)): 
     if b[i,0]==a[j,0]: 
      c[i] = a[j,1] 

返回

c = [[5],[5],[8],[6],[6],[8],[2],[8],[2]] 

的問題是我有一個非常大的數據集和for循環需要很長的時間來運行。任何建議將不勝感激。謝謝。

+1

你使用哪種語言? –

+0

[codereview.se]用於需要優化的工作代碼。 –

+0

對不起,我正在使用python –

回答

1

a格式爲[[1, ...], [2, ...], [3, ...], ...]

如果是這樣,那麼您可以通過不重複通過a來節省時間,而只是索引到它。例如:

a = np.array([[1,5],[2,8],[3,2],[4,6]]) 
b = np.array([[1],[1],[2],[4],[4],[2],[3],[2],[3]]) 

c = np.array([[a[i[0] - 1][1]] for i in b]) 
# c = [[5], [5], [8], [6], [6], [8], [2], [8], [2]] 

這將需要的b時間大小,而不是a倍大小的b時間的大小順序的順序。

+0

謝謝。這是我正在尋找的。 –

相關問題