2014-11-24 2 views
2

numpy_where를 사용하여 특정 값의 색인을 찾으려고합니다. stackoverflow를 포함하여 웹에서 꽤 많이 검색했지만 간단한 1D 예제는 찾지 못했습니다.1D 배열에서 numpy_where 사용

ar=[3,1,4,8,2,1,0] 
>>> np.where(ar==8) 
(array([], dtype=int64),) 

나는 np.where (ar == 8)가 나에게 배열에서 8의 색인/위치를 반환 할 것으로 예상했다. 내가 뭘 잘못하고 있니? 내 배열에 뭔가 있니? 감사합니다

답변

5

이것은 파이썬에서 변수 유형의 범위와 numpy이 초보자에게 혼동을 줄 수있는 좋은 예입니다. 무슨 일이 일어나고 [3,1,4,8,2,1,0]ndarray이 아니라 목록을 반환합니다. 따라서 표현식 ar == 8은 목록과 스칼라 유형 간의 모든 비교가 False을 반환하기 때문에 스칼라 False을 반환합니다. 따라서 np.where(False)은 빈 배열을 반환합니다. 이를 해결하는 방법은 다음과 같습니다.

arr = np.array([3,1,4,8,2,1,0]) 
np.where(arr == 8) 

이것은 (array([3]),)을 반환합니다. where은 튜플을 반환하기 때문에 더 혼란스러운 기회가 있습니다. 인덱스 위치 (이 경우 3)에 액세스하려는 스크립트를 작성하는 경우 튜플에서 첫 번째 (및 유일한) 결과를 가져 오려면 np.where(arr == 8)[0]이 필요합니다. 실제로 값 3을 얻으려면 np.where(arr == 8)[0][0]이 필요합니다 (배열에 8이 없으면 IndexError이됩니다).

Matlab 또는 Octave와 같은 숫자 특수 언어는 초보자에게 사용하기가 더 간단합니다. 언어가 덜 일반적이어서 이해하기 쉬운 반환 유형이 적기 때문입니다.

관련 문제