2011-07-29 7 views
1

두 개의 배열이 있습니다. 다음과 같은 복잡한 조건이 있습니다. new_arr<0 and old_arr>0 0이 아닌 숫자를 사용하고 있지만 오류가 발생합니다.0이 아닌 함수 도움말, Python Numpy

indices = nonzero(new_arr<0 and old_arr>0) 

내가 시도 : 내가 가진 코드는 다음입니다

indices = nonzero(new_arr<0) and nonzero(old_arr>0) 

그러나 그것은 나에게 잘못된 결과를 주었다.

이 문제가 발생합니까? 그리고 두 개의 0이 아닌 문장에서 공통 색인을 얻는 방법이 있습니다. 예를 들면, :

indices1 = nonzero(new_arr<0) 
    indices2 = nonzero(old_arr>0) 

이 두 지수 포함될 것이다 :

indices1 = array([0, 1, 3]) 
    indices2 = array([2, 3, 4]) 

올바른 결과 (이 경우는 소자 (3)가 될 것이다)이 두에서 공통 원소를 얻는 것이다. 이런 식으로 뭔가 :

result = common(indices1, indices2) 

답변

5

시도 indices = nonzero((new_arr < 0) & (old_arr > 0)) : 그것은 한 모든 nonzero(condition)을 반환 있다면

In [5]: import numpy as np 

In [6]: old_arr = np.array([ 0,-1, 0,-1, 1, 1, 0, 1]) 

In [7]: new_arr = np.array([ 1, 1,-1,-1,-1,-1, 1, 1]) 

In [8]: np.nonzero((new_arr < 0) & (old_arr > 0)) 
Out[8]: (array([4, 5]),) 
+0

이것은 정확히 내가 찾고있는 것입니다. & 좋은 옛날 대신에 &를 사용하여 내 마음에 온 적이. 감사! –

+0

+1이지만 입력 배열이 모두 같은 모양 인 경우에만 작동합니다 (OP에는 이러한 가정이 없음). – Radim

+0

@Radim : 그런 가정은 언급하지 않았지만 "일반적인 색인"에 대해 말하면, 더 큰 배열의 크기를 어쨌든 더 작은 배열의 크기로 조정해야합니다. – JAB

2

indices = nonzero(logical_and(new < 0, old > 0)) 

는 (그것에 대해 생각하십시오, 내 앞의 예는 모두 유용하지 않았다 어쨌든.)

+0

나는 condition.nonzero()로 무엇을 의미하는지 이해하지 못합니다. –

+0

@theSun : 내 대답을 수정했습니다. – JAB

+0

감사합니다. –