2017-02-19 64 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] 
相关问题