2011-09-11 4 views
2

두 개의 열이있는 배열 'foo'가 있다고 가정 해 보겠습니다. 열 0은 월을 나타내는 값 1 - 12를가집니다. 열 1에는 해당 측정 값이 있습니다.numpy.where()와 함께 'in'을 사용하는 방법

numpy.where(foo[:,1] in (12, 1, 2), False, True) 

하지만 (12, 1 '나의 영리한 나타납니다 : 나는 12 월, 1 월, 2 월 (12,1,2)에서 측정 값의 마스크를 만들고 싶었 경우에 나는 내가 할 수있는 것으로 의심되는 것 , 2) '는 where()의 조건으로 작동하지 않습니다. [12, 1, 2] 등으로도 작동하지 않습니다 ...

또 다른 영리한 방법이 있습니까? (12, 1, 2) 측정 값을 모두 배열로 모으는 더 좋은 방법이 있습니까? numpy 방법은 무엇입니까?

답변

4

내가이 (가) '에 (12, 1, 2)'작동하지 않는 이유를 생각한다 (매월 측정 불규칙한 수 있기 때문에 배열을 재편하는 것은 밖으로 질문)이라는 요소 앞에있는 요소는 단일 요소 여야합니다.

하지만이 경우 numpy는 numpy 배열로 'in'을 수행하는 in1d (documentation)의 기능을 갖습니다. 코드와 함께 :

np.where(np.in1d(foo[:,0], [12, 1, 2]), False, True) 

이 코멘트에 대답을 완료하려면 : where는 중복 사용이 경우, in1d의 출력은 인덱스 foo는 데 사용할 수 있습니다 :

foo[np.in1d(foo[:,0], [12, 1, 2])] 

나에 대해

foo[~np.in1d(foo[:,0], [12, 1, 2])] 

참고 : in1d은 numpy 1.4 이상에서만 사용 가능합니다.

+0

예! 나는 이걸로 np.where()도 필요 없다! np.in1d ​​()를 사용하여 필요한 것을 만들 수 있습니다. 감사합니다! – brews

+0

사실, np.in1d의 출력을 사용하여 foo를 인덱싱 할 수 있습니다. – joris