728x90
반응형
본 포스팅은 업무 중 발생했던 오류들을 예시를 통해 어떻게 해결을 했는지 적을 예정이다.
TypeError: only integer scalar arrays can be converted to
a scalar index
list index에 scalar 가 아닌 np.array가 들어갔을 때 발생하는 오류이다.
[예시]
import numpy as np
rand_cube_3D = np.random.randint(0,10,size=[5,5,5])
print(rand_cube_3D)
"""
array([[[3, 1, 4, 8, 9],
[7, 1, 2, 8, 3],
[4, 9, 0, 6, 9],
[8, 9, 9, 4, 0],
[5, 0, 5, 8, 1]],
[[9, 4, 2, 9, 2],
[6, 7, 6, 8, 8],
[3, 7, 8, 7, 9],
[6, 4, 6, 4, 7],
[5, 3, 4, 2, 4]],
[[1, 3, 5, 7, 2],
[3, 0, 7, 2, 3],
[0, 0, 0, 2, 6],
[7, 2, 5, 2, 2],
[0, 2, 1, 5, 7]],
[[2, 4, 6, 9, 5],
[4, 4, 3, 4, 2],
[9, 1, 4, 6, 5],
[8, 9, 8, 3, 1],
[3, 0, 6, 5, 5]],
[[8, 2, 4, 7, 6],
[3, 0, 9, 8, 6],
[3, 3, 0, 7, 8],
[1, 5, 1, 1, 6],
[7, 3, 0, 1, 3]]])
"""
다음과 같이 3D array가 있고 중간값으로부터 특정 margin을 갖은 채로 crop을 하고 싶을 때 발생했던 오류이다.
bbox_center_x = 3
bbox_center_y = 3
bbox_center_z = 3
bbox_margin = np.array([2,2,2])
cropped_cube = rand_cube_3D[bbox_center_x-bbox_margin:bbox_center_x+bbox_margin,
bbox_center_y-bbox_margin:bbox_center_y+bbox_margin,
bbox_center_z-bbox_margin:bbox_center_z+bbox_margin,]
#TypeError Traceback (most recent call last)
----> 1 cropped_cube = rand_cube_3D[bbox_center_x-bbox_margin:bbox_center_x+bbox_margin,
2 bbox_center_y-bbox_margin:bbox_center_y+bbox_margin,
3 bbox_center_z-bbox_margin:bbox_center_z+bbox_margin,]
TypeError: only integer scalar arrays can be converted to a scalar index
이는 bbox margin 또한 array로 구성이 되어 있기 때문에 list 내 index에 array가 입력되어 발생된 오류이다. 이는 scalar 값으로 index를 변경한다면 쉽게 해결된다.
[해결]
cropped_cube = rand_cube_3D[bbox_center_x-bbox_margin[0]:bbox_center_x+bbox_margin[0],
bbox_center_y-bbox_margin[1]:bbox_center_y+bbox_margin[1],
bbox_center_z-bbox_margin[2]:bbox_center_z+bbox_margin[2],]
print(cropped_cube.shape)
# (4, 4, 4)
728x90
반응형
댓글