2022.06.20 - [Studying/Machine Learning] - [머신러닝] 파이썬 Numpy - Numpy 모듈의 수학적 기능들
위 포스팅에 이어
이번 포스팅에서는 파이썬 Numpy모듈의 indexing과 slicing에 다뤄보려고 한다.
Indexing은 numpy 배열의 특정 원소에 접근하는 방법이다.
Python의 list와 유사하게 대괄호 [ ]를 이용해 접근할 수 있다.
Slicing은 [start:end:step]을 이용해
start index부터 end index - 1까지의 원소를 step만큼 건너 뛰면서 가져오는 것이다.
그럼 1D array부터 예제를 보겠다.
1D array
x = np.arange(0, 10)
print(x)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- indexing
x[- 1], x[2]
# (9, 2)
Indexing은 [ ]안에 index를 넣음으로써 해당 원소를 가져올 수 있다.
-1 인덱스는 끝에서 첫 번째, 즉, 마지막 원소에 해당한다.
- slicing
print(x[0: 5]) # default : step = 1
# array([0, 1, 2, 3, 4])
print(x[ : 5]) # default : step = 1
# array([0, 1, 2, 3, 4])
print(x[ : 5 : 2]) # step = 2
# array([0, 2, 4])
Slicing은 처음에 설명한 것과 같이
[start: end: <option> step]을 이용해 start부터 end - 1까지 step만큼 건너 뛰면서 원소를 가져오는 것이다.
기본 step은 1로 설정되어 있다.
- slicing with '-'
print(x[-5: ])
# array([5, 6, 7, 8, 9])
print(x[-5: - 2])
# array([5, 6, 7])
print(x[-5: : 2])
# array([5, 7, 9])
print(x[: : -1])
# array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
위와 같이 마이너스 값으로 indexing이나 slicing을 할 수 있다.
마지막 라인처럼 step을 -1로 설정하면 요소들의 순서를 뒤집은 배열을 만들 수 있다.
- 여러 index 값 초기화
index = [0,2,4]
x[index] = -10
print(x)
#array([-10, 1, -10, 3, -10, 5, 6, 7, 8, 9])
위처럼 0,2,4번째 인덱스만 초기화를 쉽게 할 수 있다.
2D-array
- reshape
x = np.arange(5,101, 5)
print(x)
# array([ 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65,
# 70, 75, 80, 85, 90, 95, 100])
x= x.reshape(-1, 4) # 뒤축을 5로 해준다
x= x.reshape(4, -1) # 앞축을 5로 해준다
print((x, x.shape))
# (array([[ 5, 10, 15, 20, 25],
# [ 30, 35, 40, 45, 50],
# [ 55, 60, 65, 70, 75],
# [ 80, 85, 90, 95, 100]]),
# (4, 5))
reshape를 통해 매트릭스의 shape을 변경할 수 있다.
- indexing
print(x[1, 1])
# 35
print(x[0])
# array([ 5, 10, 15, 20, 25])
print(x[0 ,:])
# array([ 5, 10, 15, 20, 25])
print(x[:, 0])
# array([ 5, 30, 55, 80])
원하는 행과 열의 index를 입력함으로써 indexing을 할 수 있다.
또, 한 축만 입력하면 해당하는 축 전체를 가져온다.
- slicing
print(x[:2])
# array([[ 5, 10, 15, 20, 25],
# [30, 35, 40, 45, 50]])
print(x[2,2])
# 65
print(x[2:3, 2:3])
# array([[65]])
slicing은 위와 같이 할 수 있으며, slicing을 indexing대신 사용할 수 있다.
차이점은 indexing과 달리 slicing은 해당 ndarray의 shape을 유지해준다. (2, 3 line의 차이)
이번 포스팅에서는 기본적인 indexing과 slicing을 정리해보았다.
다음 포스팅에서는 약간 더 깊게 들어가서
reshape, broadcasting, transpose등 선형대수학에서 자주 사용되는 function을 보겠다.
'Studying > Machine Learning' 카테고리의 다른 글
[머신러닝] Linear regression(선형 회귀) 구현 (0) | 2022.07.05 |
---|---|
[머신러닝] 파이썬 Numpy 연산 - Numpy dot, matmul, transpose (1) | 2022.06.25 |
[머신러닝] 파이썬 Numpy - Numpy의 유용한 기능들 (0) | 2022.06.23 |
[머신러닝] 파이썬 Numpy - Numpy 모듈의 수학적 기능들 (0) | 2022.06.20 |
[머신러닝] 파이썬 Numpy - Numpy 모듈 기본 및 ndarray 이해 (0) | 2022.06.15 |
댓글