[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로 설정됩니다.
- 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]
- 2차원 인덱싱 예시
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]