팬시 인덱싱 (Fancy indexing)
리스트나 ndarray로
인덱싱 집합을 지정하면 해당 위치의 인덱스에
ndarray를 반환하는 인덱싱 방식이다.
다시, 쉽게 이야기하면
ndarray를 index value로 사용해서 값을 반환하는 것이다.
#import numpy as np
array1d = np.arange(start =1, stop = 10)
array2d = array1d.reshape(3, 3)
array3 = array2d[[0,1] ,2]
print('array2d[[0,1],2] => ', array3.tolist())
array4 = array2d[[0,1] ,0:2]
print('array2d[[0,1],0:2] => ', array4.tolist())
array5 = array2d[[0,1]]
print('array2d[[0,1]] => ', array5.tolist())
[output]
array2d[[0,1],2] => [3, 6]
array2d[[0,1],0:2] => [[1, 2], [4, 5]]
array2d[[0,1]] => [[1, 2, 3], [4, 5, 6]]
예제를 보면
array2d[ [ 0 , 1 ] , 2] 로우축에 팬시 인덱싱이 [0 , 1]을 , 컬럼 축에는 단일 값 인덱싱 2 를 적용했다.
따라서 (row, col) 인덱스가
(0,2) ( 1,2) 로 적용되서 결과적으로
[3, 6]을 반환 하였다.
불린 인덱싱 (Boolean Indexing)
특정 조건에 따라 값을 배열 형태로 추출하는 인덱싱 방식이다.
array1d = np.arange(start =1, stop = 10)
array3 = array1d[array1d > 5]
print('array1d > 5 불린 인덱싱 결과값 : ', array3)
[output]
array1d > 5 불린 인덱싱 결과값 : [6 7 8 9]
array1d > 5
[output]
array([False, False, False, False, False, True, True, True, True])
조건으로 반환된 이 ndarray 객체를 인덱싱을
지정하는 [ ] 내에 입력하면
false 값은 무시되고 trne 값이 있는 위치 인덱스 값으로 자동 변환한다.
해당하는 인덱스 위치의 데이터만 반환하게 된다.
False가 있는 인덱스 0 ~ 4는 무시하고 인덱스 [5 ,6 ,7 ,8]이 만들어지고
이 위치 인덱스에 해당하는 데이터 세트 [6 ,7, 8, 9] 을 반환한다.
boolean_indexes = np.array([False, False, False, False, False, True, True, True, True])
array3 = array1d[boolean_indexes]
print('불린 인덱스로 필터링 결과 : ', array3)
[output]
불린 인덱스로 필터링 결과 : [6 7 8 9]
동일한 불린 ndarray 를 만들고 이를 array1d [ ] 내에 인덱스로 입력하면
동일한 데이터 세트가 반환된다.
다시말해 직접 인덱스 집합을 만들어 대입한 것과 동일하다.
indexes = np.array([5,6,7,8])
array4 = array1d[indexes]
print('일반 인덱스로 필터링 결과 :', array4)
[output]
일반 인덱스로 필터링 결과 : [6 7 8 9]
index =0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
array1d > 5 | ||||||||
False | False | False | False | False | True | True | True | True |
False 값은 무시하고 True 값에 해당하는 index value 만 저장 | ||||||||
index = 5 | index = 6 | index = 7 | index = 8 | |||||
저장된 index 값으로 데이터 조회 array1d[[5,6,7,8]] = [6,7,8,9] |
||||||||
6 | 7 | 8 | 9 |
1차원 ndarray [ 1,2,3,4,5,6,7,8,9]에서 데이터 값이 6보다 큰 데이터만 추출하려면
아마 for loop을 돌려서 하나씩 if '추출데이터' > 6 을 통해서
해당 데이터만 추출 해야 할 것이다.
불린 인덱싱을 이용하면 훨씬 간단하게 이를 구현할 수 있다.
Reference
1. https://www.w3schools.com/python/numpy/numpy_array_indexing.asp
NumPy Array Indexing
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
2. 파이썬 머신러닝 완벽가이드 위키북스 데이터 사이언스 시리즈
'Python' 카테고리의 다른 글
Numpy.dot (0) | 2022.01.10 |
---|---|
Numpy.sort, argsort (0) | 2022.01.09 |
Numpy 슬라이싱 (slicing) (0) | 2022.01.05 |
python 으로 csv 파일 합치기 (0) | 2022.01.04 |
Numpy 인덱싱 (indexing) (0) | 2022.01.03 |