본문 바로가기
Studying/Machine Learning

[머신러닝] 파이썬 Numpy - Numpy indexing과 slicing

by giem 2022. 6. 21.
반응형

2022.06.20 - [Studying/Machine Learning] - [머신러닝] 파이썬 Numpy - Numpy 모듈의 수학적 기능들

 

[머신러닝] 파이썬 Numpy - Numpy 모듈의 수학적 기능들

저번 Numpy 포스팅에 이어서 2022.06.15 - [Studying/Machine Learning] - [머신러닝] 파이썬 - Numpy 모듈 기본 및 ndarray 이해 이번엔 numpy 모듈의 수학적 연산 기능들을 살펴보려고 한다. 기본적인 수학 함수..

gm-note.tistory.com

위 포스팅에 이어

 

이번 포스팅에서는 파이썬 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을 보겠다.

반응형

댓글