2010-11-21 67 views
0

我有一個numpy的2D數組,我希望它返回coloumn c,其中(r,c-1)(row r,coloumn c)等於某個值(int n)。如何提取包含特定值的數組中的行? (numpy,scipy)

我不想遍歷寫東西的行狀

for r in len(rows): 
    if array[r, c-1] == 1: 
    store array[r,c] 

,因爲有他們的4000和這個二維數組只是20我要看看低谷之一。

我發現「過濾器」,但不知道如何使用它(找不到文檔)。

是否有一個功能,提供這樣的搜索?

回答

3

我希望我能正確理解你的問題。比方說,你有一個數組a

a = array(range(7)*3).reshape(7, 3) 
print a 
array([[0, 1, 2], 
     [3, 4, 5], 
     [6, 0, 1], 
     [2, 3, 4], 
     [5, 6, 0], 
     [1, 2, 3], 
     [4, 5, 6]]) 

,並要提取所有的行,其中第一項是2。這是可以做到這樣的:

print a[a[:,0] == 2] 
array([[2, 3, 4]]) 

a[:,0]表示陣列,== 2返回一個布爾標記陣列相匹配的條目的第一列,然後我們使用advanced indexing以提取相應的行。

當然,NumPy需要遍歷所有條目,但是這比在Python中執行要快得多。

+0

這幾乎做我想要的。我希望它返回第一個顏色爲'2'的行。在你的例子中返回數組([[2,3,4]])。 – Sebastian 2010-11-21 20:12:01

+0

好吧,我會更新我的答案。 – 2010-11-21 21:12:50

+0

這是否更好? – 2010-11-21 21:18:58

0

Numpy數組未被編入索引。如果您需要在數組大小上比線性更有效地執行此特定操作,那麼您需要使用除numpy以外的其他內容。

+0

我知道我必須看每一行,但我不想用循環做到這一點。我希望有內置函數,它可以比循環更快地完成任務。 – Sebastian 2010-11-21 20:14:11

相關問題