IndexError 해결: 인덱스로 사용되는 배열은 정수(또는 부울) 유형이어야 합니다.
Python에서 Numpy 배열로 작업할 때 인덱스 또는 유형 문제를 처리하는 다른 오류 메시지가 나타날 수 있습니다. 이러한 많은 오류 유형에서 IndexError: 인덱스로 사용되는 배열은 정수(또는 부울) 유형이어야 합니다
는 까다로울 수 있습니다.
IndexError
오류 메시지가 표시되면 잘못된 유형을 사용합니다. 이 경우 Integer
또는 Boolean
을 사용해야 했지만 배열 인덱스는 다른 데이터 유형(문자열 또는 부동 소수점)을 받습니다.
이 기사에서는 Numpy에서 숫자로 작업할 때 IndexError: arrays used as indices must be of integer (or boolean) type
오류 메시지를 처리하는 방법에 대해 설명합니다.
astype()
을 사용하여 Numpy에서 IndexError: 인덱스로 사용되는 배열은 정수(또는 부울) 유형이어야 합니다
해결
Numpy는 Integer 또는 Boolean의 두 가지 유형에서만 작동합니다. 따라서 이해하지 못하는 유형이 있으면 오류가 발생합니다.
이 오류 메시지를 더 잘 이해하기 위해 오류 메시지를 다시 만들어 보겠습니다. 오류 메시지를 다시 생성하려면 index
및 array
라는 두 개의 Numpy 배열을 생성하고 index
에서 값을 추출하고 추출된 값을 사용하여 array
의 값에 액세스해야 합니다.
추출된 값의 경우 첫 번째 열 값을 사용합니다.
import numpy as np
index = np.array([[0, 1, 2.1], [1, 2, 3.4]])
array = np.array([[1, 2, 3], [4, 5, 6]])
indices = index[:, 0]
print(array[indices])
출력:
Traceback (most recent call last):
File "temp.py", line 7, in <module>
print(array[indices])
IndexError: arrays used as indices must be of integer (or boolean) type
IndexError: arrays used as indices must be of integer (or boolean) type
오류 메시지에서 print(array[indices])
섹션에서 문제가 발생했음을 알 수 있습니다.
문법적으로 올바르다는 것을 알고 있기 때문에 우리가 찾고 있는 문제가 배열
바인딩에 대해 구문 분석 중인 항목에 존재한다는 것을 알고 있습니다. 그러면 인덱스
바인딩이 나타납니다.
오류 메시지에서 알 수 있는 바에 따르면 인덱스
바인딩의 요소는 정수
또는 부울
이 아닐 수 있습니다. dtype
속성은 인덱스
내의 요소 유형을 확인하는 데 유용합니다.
print(indices.dtype)
출력:
float64
이제 우리가 직면한 문제의 원인을 확인했습니다. array
바인딩의 인덱스에 전달하는 값은 Boolean
대신 float64
입니다.
이를 해결하려면 indices
의 값을 Integer
또는 Boolean
으로 변환해야 합니다. Integer
로 변환하는 것이 더 합리적입니다.
이를 Boolean
으로 변환하면 나중에 유용할 수 있습니다.
astype()
메서드는 Numpy 배열의 dtype
속성을 수정하는 데 도움이 됩니다. indices
바인딩의 dtype
을 수정하려면 아래를 사용할 수 있습니다.
indices = index[:, 0].astype(int)
indices.dtype
표현식을 사용하여 dtype
속성을 확인하면 아래와 같습니다.
int32
이제 코드는 다음과 같습니다.
import numpy as np
index = np.array([[0, 1, 2.1], [1, 2, 3.4]])
array = np.array([[1, 2, 3], [4, 5, 6]])
indices = index[:, 0].astype(int)
print(array[indices])
출력:
[[1 2 3]
[4 5 6]]
indices
의 값을 Boolean
으로 변환할 수 있습니다. 그것을 실험해 봅시다.
이를 위해 두 개의 부울이 있는 Numpy 배열이 있습니다.
indices = index[:, 0].astype(bool)
print(indices)
출력:
[False True]
인덱스
바인딩 값은 [0. 1.]
, 0
을 부울로 변환하면 False
를 제공하고 다른 숫자는 True
를 제공합니다. 모든 것을 함께 실행합시다.
import numpy as np
index = np.array([[0, 1, 2.1], [1, 2, 3.4]])
array = np.array([[1, 3, 5], [7, 9, 11]])
indices = index[:, 0].astype(bool)
print(array[indices])
출력:
[[ 7 9 11]]
이는 True
값만 처리하기 때문입니다.
따라서 IndexError: arrays used as indices must be of integer (or boolean) type
오류 메시지가 표시되면 어딘가에 잘못된 dtype
이 있음을 알 수 있습니다. 코드를 추적하고 필요한 값을 변환하십시오.
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn관련 문장 - Python Error
- AttributeError 수정: Python에서 'generator' 객체에 'next' 속성이 없습니다.
- AttributeError 해결: 'list' 객체 속성 'append'는 읽기 전용입니다.
- AttributeError 해결: Python에서 'Nonetype' 객체에 'Group' 속성이 없습니다.
- AttributeError: 'Dict' 객체에 Python의 'Append' 속성이 없습니다.
- AttributeError: 'NoneType' 객체에 Python의 'Text' 속성이 없습니다.
- AttributeError: Int 객체에 속성이 없습니다.