2012-07-25 119 views
3

我有一個大的numpy數組(由30000),我想根據某些條件刪除一些行。此標準僅適用於一列。Python在numpy數組中刪除行

實施例:

>>> p = np.array([[0, 1, 3], [1 , 5, 6], [4, 3, 56], [1, 34, 4]]) 
>>> p 
array([[ 0, 1, 3], 
    [ 1, 5, 6], 
    [ 4, 3, 56], 
    [ 1, 34, 4]]) 

這裏我想刪除的每一行,其中,第3列的值是> 30,即。這裏第3行。

由於數組非常大,我想避免for循環。我想到這個:

>>> a[~(a>30).any(1), :] 
array([[0, 1, 3], 
    [1, 5, 6]]) 

但是,它顯然刪除了最後兩行。關於如何以有效的方式做到這一點的任何想法?

回答

4
p = p[~(p[:,2] > 30)] 

或者(如果你的條件很容易可逆):

p = p[p[:,2] <= 30] 

回報

array([[ 0, 1, 3], 
     [ 1, 5, 6], 
     [ 1, 34, 4]]) 
+0

我認爲這是我從來沒有嘗試過的唯一選擇!謝謝 – Jolfulorc 2012-07-25 13:27:19

+1

@Jolfulorc - 歡迎來到SO!如果此答案幫助您找到問題的解決方案,則應該隨時接受它(單擊旁邊的小複選標記)。這可以讓其他人知道你的問題已經解決了,所以他們不會花大量時間來解決問題。 – mgilson 2012-07-25 13:34:44