2014-09-25 5 views
9

dtype = object 인 numpy 배열이 있는데 어느 요소가 None인지 식별하는 부울 배열을 만들고 싶습니다. 그러나numpy 요소를 None으로 비교하는 부울 배열 만들기

a = np.array(['Duck','Duck','Duck','Goose',None,1,2,3,1,3,None,4]) 
print a == 'Duck' 
print a == 3 
print a == None 

None 요소 부울 배열을 얻을 수있는 "numpythonic"방법이

[ True True True False False False False False False False False False] 
[False False False False False False False True False True False False] 
False 

을 초래하는 ... 다른 None 동작합니다처럼 보인다? 사용할 수 있습니다

np.array([x is None for x in a]) 

그러나 이것이 더 좋은 방법이어야합니다.

+0

나는'None' ... 풍어 다르게 행동 확실히 * 예상하지 않았을 ndarrays를 *! – SethMMorton

+0

... NumPy 문서의이 따옴표 때문에 특히 다음과 같습니다. * "각각의 산술 연산 (+, -, *, /, //, %, divmod (**) 또는 pow(), <<, >> Numpy에서 해당 범용 함수 (또는 ufunc)와 동일합니다. "* np.equal 만 가정 할 수 있습니다. (예 : ^, |, ~) '=='에 대한 ufunc입니다. – SethMMorton

답변

10

당신은 numpy.equal 사용할 수 있습니다

In [20]: np.equal(a, None) 
Out[20]: 
array([False, False, False, False, True, False, False, False, False, 
     False, True, False], dtype=bool) 
+0

이것은 확실히 좋은 해결 방법이지만 'None'으로 작동하지 않는 이유를 알고 있습니까? numpy 워드 프로세서는'=='이 ufunc와 동등해야한다고 말하면서 'equal'이 일치하는 ufunc라고 상상해 봅니다. – SethMMorton

+2

@SethMMorton Github에서 관련 티켓을 찾았습니다 : ['== None'은 요소 별 비교를 반환하는 대신 배열에 대해 '없음'을 표시합니다 # 3759] (https://github.com/numpy/numpy/issues)/3759) –

+0

굉장한 ... 나는 그것이 이유 (버그 다)를 해결할 것 같다. 감사! – SethMMorton

관련 문제