[Numpy] 3. ndArray 인덱싱과 슬라이싱

ndArray 인덱싱과 슬라이싱

1. 인덱싱 기초

1차원 np.array 의 인덱싱리스트의 인덱싱과 같습니다.

3 4 1 2 5 3 4
인덱스 0 1 2 3 4 5 6
-인덱스 -7 -6 -5 -4 -3 -2 -1
import numpy as np

A = np.array([3, 4, 1, 2, 5, 3, 4])
print(A[0]) # 3
print(A[3]) # 2
print(A[-7]) # 3
print(A[-4]) # 2

2차원 이상의 배열에서는 각 차원에서의 위치를 콤마로 연결해주는 방식으로 인덱싱을 할 수 있습니다. 2차원 이상의 리스트에서는 콤마로 직접 연결하는 것이 아니라, 1차원 인덱스로 각리스트에 접근해서 새로이 인덱싱을 수행한다는 저과 다릅니다. (1차시 자료를 참고하시면 도움이 될 겁니다.)

import numpy as np
A = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

print(A[0]) # [1,2,3]
print(A[0,1]) # 2
print(A[1,2]) # 6

2. 슬라이싱 기초

슬라이싱은 차원마다 시작 인덱스, 종료 인덱스, 증가폭 을 설정함으로써 수행할 수 있습니다.

값이 입력되지 않으면 시작 인덱스는 0, 종료 인덱스는 배열에 포함된 요소의 개수, 증가폭은 1로 설정됩니다.

import numpy as np
a = np.array([0, 1, 2, 3, 4, 5])
print( a[1:5:2] ) # [1, 3]
print( a[1:5] ) # [1,2,3,4]
print( a[1:] ) # [1,2,3,4,5]
print( a[:] ) # [0,1,2,3,4,5]
import numpy as np
A = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9],
    [10, 11, 12]
])

print( A[1:3, 0:1] ) # [ [4], [7] ]
print( A[1:4, 0:2] ) # [ [4,5], [7,8], [10,11] ]
import numpy as np

a = np.array([0,1,2,3,4,5])
print(a[4:1:-1]) # [4, 3, 2]
print(a[5:0:-2]) # [5, 3, 1]
print(a[::-1]) # [5,4,3,2,1,0]

3. 실습 ( 인덱싱 & 슬라이싱 )

import numpy as np
A = np.array([
    [0, 1, 2],
    [3, 4, 5],
    [6, 7, 8],
    [9, 10, 11]
])

print('1번행반 인덱싱=', A[1])
# [3 4 5]

print('0번행의 2번열 요소 인덱싱=', A[0, 2])
# 2

print('1번~4번행전까지 슬라이스, 1번열 요소 인덱싱=', A[1:4, 1])
# [4 7 10]

print('1번~4번행전까지 슬라이스, 0번~2번열전까지 슬라이스=', A[1:4, 0:2])
# [[3 4], [6 7], [9 10]]

print('0번행의 요소 역순 슬라이스=', A[0, ::-1])
# [2 1 0]