2012-09-01 66 views
0

我需要僅在最後一列是0的行訪問此numpy的陣列,有時,有時行,其中最後一列的值爲1索引numpy的多維數組

y = [0 0 0 0 
    1 2 1 1 
    2 -6 0 1 
    3 4 1 0] 

我有一遍又一遍地做這個,但寧願迴避創建重複數組或每次重新計算。有什麼方法可以確定有關指標並只是給他們打電話?所以我可以這樣做:

>>print y[LAST_COLUMN_IS_0] 
[0 0 0 0 
3 4 1 0] 

>>print y[LAST_COLUMN_IS_1] 
[1 2 1 1 
2 -6 0 1] 

P.S.數組中的列數永遠不會改變,它總是有4列。

回答

6

您可以使用numpy的boolean indexing來確定要選擇哪些行,並使用numpy的花哨索引/切片來選擇整行。

print y[y[:,-1] == 0, :] 
print y[y[:,-1] == 1, :] 

可以y[:,-1] == 0... == 1保存像往常一樣,因爲他們只是numpy的陣列。

(該y[:,-1]選擇整個的最後一列,而==相等性檢查發生逐元素,產生布爾值的數組。)

+0

1,它的工作原理。但是我很難理解'y [:, - 1] == 0是什麼。這是一個numpy數組,但不是一個範圍?你怎麼能用它來索引? – Zach

+1

@Zach,http://www.scipy.org/Tentative_NumPy_Tutorial#head-d55e594d46b4f347c20efe1b4c65c92779f06268 – huon

+0

謝謝。快速的附加問題,我如何從結果中選擇一列。例如,要選擇第一列,這不起作用:'y [y [:, - 1] == 0,::] [0]' – Zach