소개
이 랩에서는 Python 의 Numpy 라이브러리에서 인덱싱 (Indexing) 과 슬라이싱 (Slicing) 의 개념을 다룹니다. 배열에서 요소에 접근하고, 수정하며, 특정 범위의 요소를 추출하는 방법을 배우게 됩니다. Numpy 라이브러리에서 다양한 인덱싱 방법을 예제를 통해 설명하고 시연합니다.
VM 팁
VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접근하십시오.
때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.
학습 중에 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.
기본 사항 이해
- NumPy 배열에서 슬라이싱 (Slicing) 은 기본적으로 배열에서 특정 범위의 요소를 추출하는 방법입니다.
- ndarray 객체의 항목은 항상 0 부터 시작하는 인덱스를 따릅니다.
- Numpy 라이브러리에서 ndarray 객체의 내용을 접근하고 수정하려면 Python 의 내장 컨테이너 객체와 마찬가지로 인덱싱 (Indexing) 또는 슬라이싱을 수행할 수 있습니다.
NumPy 배열 슬라이싱
- 배열에서의 슬라이싱 (Slicing) 은 Python 리스트에서 수행되는 방식과 동일하게 수행됩니다.
- 배열에 100 개의 요소가 있고, 값의 일부만 선택하려는 경우, 슬라이싱을 수행하여 전체 ndarray 에서 필요한 값 집합을 추출할 수 있습니다.
- Python 리스트 슬라이싱을 배우면, 이를 Numpy ndarray 에도 동일하게 적용할 수 있습니다.
NumPy 배열 인덱싱
- NumPy 라이브러리에서 사용할 수 있는 세 가지 유형의 인덱싱 방법이 있습니다:
- 필드 접근 (Field access) - 이는 값의 인덱스를 사용하여 직접 필드에 접근하는 방식입니다.
- 기본 슬라이싱 (Basic Slicing) - 기본 슬라이싱은 Python 의 기본 슬라이싱 개념을 n 차원으로 확장한 것입니다.
- 고급 인덱싱 (Advanced Indexing) (이 랩에서는 다루지 않음)
예시
- 이러한 개념에 대한 더 나은 이해를 얻기 위해 몇 가지 예시를 살펴보겠습니다.
예제 1 - Ndarray 슬라이싱
import numpy as np
a = np.arange(10)
print("The ndarray is :")
print(a)
s = slice(2,7,2)
print("After applying slice() Function:")
print (a[s])
- 위의 코드는
arange()함수를 사용하여 ndarray 객체를 준비합니다. - 슬라이스 객체는 시작 (start), 종료 (stop), 단계 (step) 값 2, 7, 2 로 정의됩니다.
- 그 후, 이 슬라이스 객체는 ndarray 에 전달됩니다. 인덱스 2 부터 7 까지, 단계 값 2 로 시작하는 부분이 슬라이싱됩니다.
예제 2 - 단일 항목 슬라이싱
import numpy as np
a = np.arange(15)
print("The array is :")
print(a)
## using the index directly
b = a[7]
print("The Eighth item in the array is :")
print (b)
- 위의 코드는 ndarray 객체에서 단일 항목을 슬라이싱합니다.
- 인덱싱 (indexing) 을 사용하여 단일 배열을 매우 쉽게 슬라이싱할 수 있습니다.
예제 3
import numpy as np
a = np.arange(20)
print("The array is :")
print(a)
print("Slicing of items starting from the index:")
print(a[2:])
- 위의 코드는 주어진 인덱스부터 마지막 인덱스 또는 마지막 요소까지의 항목을 슬라이싱합니다.
예제 4
import numpy as np
a = np.arange(20)
print("The array is :")
print(a)
print("Slicing of items between two given indexes:")
print(a[2:8])
- 위의 코드는 두 개의 주어진 인덱스 사이의 모든 항목을 슬라이싱합니다.
- 종료 인덱스에 있는 값은 제외합니다.
엘립시스 사용법
- 슬라이싱 (slicing) 시, ellipsis (...) 는 배열의 차원과 동일한 길이의 선택 튜플을 만드는 데 사용됩니다.
- 다차원 ndarray 의 경우, ellipsis 가 행 위치에 사용되면 행의 항목으로 구성된 ndarray 를 반환하며, 열의 경우에도 마찬가지입니다.
import numpy as np
a = np.array([[11,2,23],[33,44,5],[84,25,16]])
print ("The array is :")
print (a )
print ('\n')
#To return array of items in the second column
print ('The items in the second column are:')
print (a[..., 1] )
print ('\n')
## In order to slice all items from the second row
print ('The items in the second row are:')
print (a[1, ...])
print ('\n')
## In order to slice all items from column 1 onwards
print ('The items onwards to column 1 are:' )
print (a[..., 1:])
요약
이 랩에서는 Numpy 라이브러리의 인덱싱 (Indexing) 과 슬라이싱 (Slicing) 개념을 다루었습니다. Numpy 라이브러리에서 다양한 인덱싱 방법과 배열 슬라이싱의 여러 가지 방법을 배웠습니다. 또한 이러한 개념의 실제 구현을 보여주는 예시도 살펴보았습니다.