2017-02-19 104 views
0

我有一個如下所示的numpy數組。我需要計算第一個元素爲2的行數。所以在下面的數組中,四行以2開頭 - 答案是4.在numpy中最好如何實現? (我不能使用熊貓,但可以使用scipy)。numpy:計數在一個元素滿足條件的二維數組中

array([[1, 4, 5], 
     [1, 4, 5], 
     [2, 4, 5], 
     [2, 4, 5], 
     [2, 4, 5], 
     [2, 4, 5], 
     [3, 4, 5], 
     [3, 4, 5], 
     [3, 4, 5], 
     [3, 4, 5], 
     [3, 4, 5], 
     [3, 4, 5]]) 

回答

4

首先,取第一列,所有行:

a[:,0] 

然後,找到2 s:

a[:,0] == 2 

給你一個布爾數組。然後你就可以概括:

(a[:,0] == 2).sum() 
2

np.count_nonzero其在常見的成語被應用於由

np.count_nonzero(data[:, 0] == 2) 

順便說一句評估條件生成的邏輯陣列。它可能只是舉例的目的,但如果你的數組進行排序像你這樣的,你也可以使用np.searchsorted

np.diff(np.searchsorted(data[:, 0], (2, 3)))[0] 
0

除了上面還有一個辦法接近

>>> x[:,0]==2 
array([False, False, True, True, True, True, False, False, False, 
     False, False, False], dtype=bool) 

會給你TRUE對於具有第一列2

>>> x[x[:,0]==2] 
array([[2, 4, 5], 
     [2, 4, 5], 
     [2, 4, 5], 
     [2, 4, 5]]) 

給出了行你相應的行和滿足所需條件。現在,你可以使用形狀函數來獲得長度。

x[x[:,0]==2].shape[0] 
相關問題