HOWTO · Python
IndexError: 스칼라 변수에 대한 잘못된 인덱스 수정
NumPy 스칼라를 다시 인덱싱할 때 발생하는 IndexError를 진단하고 수정합니다.
이 페이지의 내용
IndexError: invalid index to scalar variable은 인덱싱이 이미 스칼라 하나를 반환했고 다음 [...]가 그 스칼라를 다시 인덱싱하려 한다는 뜻입니다. NumPy에서는 ndim, shape, 선택한 값을 확인하세요.
배열과 선택한 값 검사하기
1차원 NumPy 배열에는 위치 하나가 필요합니다. values[0]은 한 원소 배열이 아니라 NumPy 스칼라이므로 values[0][1]은 실패합니다.
import numpy as np
values = np.array([1, 2, 3, 4, 5])
selected = values[0]
print(values.ndim, values.shape)
print(type(selected).__name__)
print(values[3])
Output:
1 (5,)
int64
4
구체적인 스칼라 클래스는 달라질 수 있지만 selected에 더 이상 배열 차원이 없다는 점이 중요합니다.
오류를 재현하고 1차원 배열 수정하기
첫 번째 첨자는 1을 선택하므로 두 번째 첨자는 유효하지 않습니다. 값이 필요하면 추가 첨자를 제거하고 배열이 필요하면 슬라이스를 사용하세요.
import numpy as np
values = np.array([1, 2, 3, 4, 5])
try:
print(values[0][1])
except IndexError as error:
print(error)
print(values[0])
print(values[0:2])
Output:
invalid index to scalar variable.
1
[1 2]
values[0]은 스칼라를, values[0:2]는 1차원 배열을 반환합니다.
2차원 NumPy 배열 인덱싱하기
2차원 배열에는 행과 열이 있으며 grid[row, column] 표기가 그 의도를 직접 나타냅니다.
import numpy as np
grid = np.array([[1, 2, 3], [4, 5, 6]])
print(grid.ndim, grid.shape)
print(grid[1, 2])
print(grid[1][2])
Output:
2 (2, 3)
6
6
두 형식 모두 6을 반환하지만 세 번째 첨자는 그 스칼라를 다시 인덱싱하려 합니다.
스칼라 인덱싱과 범위 밖 오류 구분하기
values[9]는 존재하지 않는 원소를 요청합니다. values[0][1]은 유효한 원소에 도달한 뒤 그것을 컨테이너로 잘못 취급합니다.
array.ndim과 array.shape를 출력하고 긴 식을 중간 변수로 나누세요. NumPy 인덱싱 문서와 스칼라 참조를 확인할 수 있습니다.