IndexError 해결: 인덱스로 사용되는 배열은 정수(또는 부울) 유형이어야 합니다.

Olorunfemi Akinlua 2023년6월21일
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의 두 가지 유형에서만 작동합니다. 따라서 이해하지 못하는 유형이 있으면 오류가 발생합니다.

이 오류 메시지를 더 잘 이해하기 위해 오류 메시지를 다시 만들어 보겠습니다. 오류 메시지를 다시 생성하려면 indexarray라는 두 개의 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 Akinlua avatar Olorunfemi Akinlua avatar

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