Appia의 IT세상

파이썬[Python] 056 배열 인덱싱(Indexing)과 슬라이싱(slicing) - Numpy009 본문

Python/Python Numpy

파이썬[Python] 056 배열 인덱싱(Indexing)과 슬라이싱(slicing) - Numpy009

Appia 2020. 3. 4. 08:34
반응형

이번 포스팅은 넘파이(numpy)에서 사용하는 인덱싱과 슬라이싱에 대해서 살펴보고자 합니다. 물론, 이렇게 인덱싱과 슬라이시이에 관련해서 별도로 다루다는 것에 대해서 사람들마다 각기 다른 의견을 가지고 있을 수 있습니다. 하지만, 이 부분은 반드시 필요로 하다고생각합니다. 넘파이(numpy)를 자주 사용하시는 분들을 이해 하시겠지만, 이 부분은 확실히 배열에서는 빼놓을 수 없이 중요한 부분입니다. 그래서 간단하지만, 잘 살펴보도록 하겠습니다. 

 

먼저 파이썬뿐 아니라 대부분 언어에서 슬라이싱을 하는 컨셉은 거의 대부분 유사합니다. 시작, 끝 , 간격 이 3가지를 가지고 합니다. 즉 start, stop, step를가지고 진행하는 것이죠 . 그럼 다음을 한번 살펴보겠습니다. 

 

1
2
3
4
import numpy
arr = numpy.arange(20)
slice_arr = slice(3,15,2)
print(arr[slice_arr])
cs

 

위의 예제를 실행해보니, 다음과 같은 결과가 나옵니다. 

1
3  5  7  9 11 13]
cs

 

arr이라는 배열을 앞서 포스팅에서 봤던 arange를 이용하여 배열을 만들었습니다. 이 배열에서 slice(start, stop, step)을 이용하여 다음과 값을 추출하였습니다. 그럼 다음 예제를 한번 살펴보겠습니다. 

1
2
3
4
5
6
import numpy
arr = numpy.arange(20)
slice_arr = slice(3,15,2)
sarr = arr[3:15:2]
print(arr[slice_arr])
print(sarr)
cs

 

그럼 다음과 같은 결과가 나옵니다. 

1
2
3  5  7  9 11 13]
3  5  7  9 11 13]
cs

즉, slice함수를 사용하지 않고도 직접 start, stop, step부분을 적용 가능합니다.  그럼 앞서서 봤던 다음과 같은 형태도 되겠죠? 

1
2
3
import numpy
arr = numpy.arange(20)
print(arr[3:11])
cs

위의 결과를 실행하면 다음과 같은 결과가 나옵니다. 

1
3  4  5  6  7  8  9 10]
cs

 

위의 예시는 단일 차원이라 그렇게 큰 어려움이 없었지만, 이제부터는 다차원이라서 조금 더 신경을 써야 합니다. 물론, 제가 넘파이를 자주 사용하는 이유도 다차원에 대한 연산이 매우 용이하기 때문입니다. 그럼 다음 예제를 한번 살펴보도록 하겠습니다. 

 

1
2
3
4
5
import numpy
arr = numpy.array([[1,2,3],[3,4,5],[4,5,6]])
print(arr)
print("\n")
print(arr[1:])
cs

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. 

1
2
3
4
5
6
7
[[1 2 3]
 [3 4 5]
 [4 5 6]]
 
 
[[3 4 5]
 [4 5 6]]
cs

처음에는 다차원 배열을 그대로 출력해주고 있습니다. 그 다음주에는 0번째 열을 스킵하고, 1번째 줄부터 출력하게 해줍니다. 그럼 다음과 같이 다른 예를 살펴보겠습니다. 

 

1
2
3
4
5
6
7
8
9
10
11
import numpy
arr = numpy.array([[1,2,3],[3,4,5],[4,5,6]])
print (arr)
print('\n')
 
#column print 첫번째 행 출력
print (arr[...,1])
print ('\n')
 
#column range print 첫번째 행부터 출력 
print (arr[...,1:])
cs

위의 예제를 실행하면 다음과 같은 결과가 나옵니다. 

1
2
3
4
5
6
7
8
9
10
11
12
[[1 2 3]
 [3 4 5]
 [4 5 6]]
 
 
[2 4 5]
 
 
[[2 3]
 [4 5]
 [5 6]]
 
cs

column 출력해주는 부분을 보시면 다음과 같습니다. arr[...,1] 에서 ...을 열을 나타냅니다. 즉, 열 부분을 스킵하더라고 행을 중심으로 출력하게 해주는 부분입니다. 그리고 그 다음에 있는 arr[...,1:]에서  1:은 1번째 행부터 ~ 라는 의미입니다. 

 

오늘은 배열의 인덱싱과 슬라이싱에 대해서 한번 살펴봤습니다. 모든 부분이 도움이 되길 바랍니다. 혹 궁금하시거나 문의 사항이 있으시면 언제든지 댓글 부탁드립니다. 감사합니다. 

반응형
Comments