이것은 파이썬에서 변수 유형의 범위와 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와 같은 숫자 특수 언어는 초보자에게 사용하기가 더 간단합니다. 언어가 덜 일반적이어서 이해하기 쉬운 반환 유형이 적기 때문입니다.