일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- python
- Outlook
- pythongui
- 비주얼베이직
- 아웃룩
- python3
- 엑셀
- office
- 문자열
- VBA
- 윈도우10
- 안드로이드
- Excel
- 깃
- pyqt5
- 파이썬3
- git
- pandas
- html
- windows
- Android
- Windows10
- 파워포인트
- matlab
- win32com
- 파이썬GUI
- 파이썬
- 오피스
- 윈도우11
- Windows11
Appia의 IT세상
파이썬[Python] 056 배열 인덱싱(Indexing)과 슬라이싱(slicing) - Numpy009 본문
파이썬[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번째 행부터 ~ 라는 의미입니다.
오늘은 배열의 인덱싱과 슬라이싱에 대해서 한번 살펴봤습니다. 모든 부분이 도움이 되길 바랍니다. 혹 궁금하시거나 문의 사항이 있으시면 언제든지 댓글 부탁드립니다. 감사합니다.