2017-02-19 1 views
0

다음과 같이 numpy 배열이 있습니다. 첫 번째 요소가 2 인 행의 개수가 필요합니다. 아래 배열에서 4 행은 2로 시작합니다 - 대답은 4가 될 것입니다.이 방법이 numpy에서 가장 잘 수행되는 방법은 무엇입니까? (팬더는 사용할 수 없지만 scipy는 사용할 수 있습니다.)numpy : 요소가 조건을 만족하는 2D 배열에서 계산

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(data[:, 0] == 2) 

Btw는 조건을 평가함으로써 생성 된 논리 어레이에인가 np.count_nonzero있다. 그냥 예를 위해 아마, 그러나 당신의 배열이 당신처럼 정렬 된 경우도 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) 

2.

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

가 제공으로 첫 번째 열이있는 행을 당신에게 TRUE를 줄 것이다 접근 당신은 해당 행과 필요한 조건을 충족시킵니다. 이제 shape 함수를 사용하여 길이를 얻을 수 있습니다.

x[x[:,0]==2].shape[0] 
관련 문제