인덱싱(indexing): 배열의 위치나 조건을 지정해 배열의 원소를 선택하는 것슬라이싱(slicing): 범위를 지정해 배열의 원소를 선택하는 것
arr1 = np.arange(4, 17)
arr1
- 출력
array([ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
시작위치 에서 끝위치-1 에 해당하는 배열의 원소를 반환# 3번에서 7번까지의 요소
arr1[3:8]
- 출력
array([ 7, 8, 9, 10, 11])
처음 부터 끝위치-1 원소 반환arr1[:4]
- 출력
array([4, 5, 6, 7])
시작위치 부터 마지막 원소까지 반환arr1[3:]
- 출력
array([ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
모든 원소 반환arr1[:]
- 출력
array([ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
step 만큼 건너뛰며 원소 반환arr1[::2]
- 출력
array([ 4, 6, 8, 10, 12, 14, 16])
arr1[::-1]
- 출력
array([16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4])
arr2 = np.array([[ 1, 2, 3, 4],
[50, 60, 70, 80],
[ 9, 10, 11, 12]])
2행의 모든 요소
arr2[2]
arr2[2,:]
arr2[2][:]
- 출력
array([ 9, 10, 11, 12])
3열의 모든 요소
arr2[:,3]
- 출력
array([ 4, 80, 12])
arr2[:] 전체 요소 중 [3] 3행을 반환하는 것으로 arr2[3] 과 같다. 따라서 IndexError 가 발생하는 것이다.arr2[:][3]
- 출력
IndexError: index 3 is out of bounds for axis 0 with size 3
arr2[1][1:3]
- 출력
array([60, 70])
arr2[1][1:3] = np.array([-10, -20])
arr2
- 출력
array([[ 1, 2, 3, 4],
[ 50, -10, -20, 80],
[ 9, 10, 11, 12]])
3차원 배열 슬라이싱
arr3 = np.arange(1, 13).reshape(2, 3, 2)
arr3
- 출력
array([[[ 1, 2],
[ 3, 4],
[ 5, 6]],
[[ 7, 8],
[ 9, 10],
[11, 12]]])
arr3[1]
- 출력
array([[ 7, 8],
[ 9, 10],
[11, 12]])
# 1
arr3[1][2]
# 2
arr3[1, 2]
# 3
arr3[1][2,:]
- 출력
array([11, 12])
# 1
arr3[1][0][-1]
# 2
arr3[1,0,-1]
- 출력
np.int64(8)