2016-10-25 106 views
0

我有一個特定的數字列表(item_list),我需要在二維數組(C)內關聯所有行索引。請看以下代碼:查找二維數組中的一組元素的所有行索引

# Sample code 
item_list = [1, 2, 3] 

C= [[0 for x in range(5)] for x in range(5)] 

C[0][:]=[1,5,3,25,30] 
C[1][:]=[7,9,15,2,45] 
C[2][:]=[2,9,15,78,98] 
C[3][:]=[3,90,15,1,98] 
C[4][:]=[12,19,25,3,8] 

rind=[] 

for item in item_list: 
    v=[i for i in range(len(C)) for j in range (len(C[i])) if C[i][j]==item ] 
    r_ind.append(v) 

我的二維數組大小是〜7M * 4,任何人都可以幫我做這個快?

+2

在純Python中可能存在微優化,但我只是建議'numpy' –

+0

您是否嘗試過使用線程?將輸入數組分割到不同的線程中。這可能會加快速度。 – Raza

+0

@Cheetah in Python線程不會加快速度,需要進程。 –

回答

1

對於初學者:

rind = [[i for i in range(len(C)) if item in C[i]] 
     for item in item_list] 

這裏關鍵的變化是使用的in這應該是比你手動檢查速度更快。

這也意味着如果一個數字在輸入中的子列表中出現多次,我認爲是您真正想要的,那麼您將不會在輸出中的子列表中多次獲得相同的i

+0

謝謝。我將它包含在我的代碼中,單個項目大約需要13秒。有沒有比這更快的方法? – Mechanician

+0

多處理和/或numpy。 –

相關問題