2017-04-20 1 views
1

당 보유하고 여기서 다음과 같은 I 배열이 인덱스를 얻을 : 나는 x > 1, 예를 들어, 조건이 보유하고 행 당 인덱스를 얻기 위해 노력하고NumPy와는 : 조건이 행

In [70]: x 
Out[70]: 
array([[0, 1, 2], 
     [3, 4, 5]]) 

. 내가 numpy.where, numpy.nonzero을 시도

([2], [0, 1, 2])처럼

예상 출력입니다,하지만 그들은 이상한 결과를 제공합니다.

답변

0

한 가지 방법 -

r,c = np.where(x>1) 
out = np.split(c, np.flatnonzero(r[1:] > r[:-1])+1) 

샘플 실행 -

In [140]: x 
Out[140]: 
array([[0, 2, 0, 1, 1], 
     [2, 2, 1, 2, 0], 
     [0, 2, 1, 1, 0], 
     [1, 0, 0, 2, 2]]) 

In [141]: r,c = np.where(x>1) 

In [142]: np.split(c, np.flatnonzero(r[1:] > r[:-1])+1) 
Out[142]: [array([1]), array([0, 1, 3]), array([1]), array([3, 4])] 

또는, 우리가 지금처럼 마지막 단계에 np.unique를 사용할 수 있습니다 -

np.split(c, np.unique(r, return_index=1)[1][1:]) 
+0

좋아 보인다. 그것은 불행한 일이지만 더 간단하지는 않습니다. – cosmosa

+0

@ cosmos1990 함수에 넣고 멋진 이름을주고 내장 된 것처럼 가장합니다. 당신이 간다, 그것은 "더 간단하게되었다":) – Divakar