머신러닝/넘파이

[Numpy] ndarray 인덱싱(Indexing) 종류와 사용방법(3) - 불린(Boolean) 인덱싱

shoney9254 2021. 8. 23. 21:50
반응형

ndarray의 데이터 인덱싱의 종류를 알아보고 종류별 사용 방법에 대해서 알아보자.

 

1. 특정 위치의 단일값 추출 - [링크 클릭]

2. 슬라이싱 - [링크 클릭]

3. 팬시 인덱싱 - [링크 클릭]

4. Boolean 인덱싱 

 

이번 시간은 4. Boolean 인덱싱을 사용해보도록 합니다. Boolean 인덱싱은 자주 사용하게 될겁니다.

밑에 예제를 따라해 보시면, 조건을 이용해서 Boolean 값을 반환해서 True인 값만 들어있는 array를 반환할 수 있다는 큰 장점이 있는 인덱싱입니다. (알고리즘 문제에서도 쉽게 문제해결 가능합니다.)

 

먼저, 아래와 같이 numpy를 임포트 해서 array1d라는 ndarray 하나를 생성해 줍니다. 

소스 코드

import numpy as np

 

array1d = np.arange(start=1, stop=10)

 

 

4. Boolean 인덱싱

1) True, False로 구성된 Boolean 인덱싱

Boolean 인덱싱은 아래와 같이 ndarray에 바로 조건문을 사용하면, True와 Flase 값이 들어가있는 ndarray를 반환합니다. 

소스 코드

print(array1d)

 

# 5보다 작은 값은 true로 ndarray 객체로 반환합니다.

ndarray1d = array1d < 5

print("ndarray1d:", ndarray1d)

print(type(ndarray1d))

결과

[1 2 3 4 5 6 7 8 9]
ndarray1d: [ True  True  True  True False False False False False]
<class 'numpy.ndarray'>

 

2) Boolean ndarray을 [ ]에 대입

위에서 얻어진 [ True  True  True  True False False False False False] ndarray를 ndarray에 대입해봅시다. 

소스 코드

# []안에 불린 인덱싱을 넣게되면 True 인 값만 반환하는 ndarray 생성합니다.

ndarray1d2 = array1d[array1d < 5]

print("ndarray1d2:", ndarray1d2)

print(type(ndarray1d2))

결과

ndarray1d2: [1 2 3 4]
<class 'numpy.ndarray'>

 

3) Boolean List를 [ ]에 대입

지금까지는 Boolean으로 이루어진 ndarray를 [] 대괄호 안에 대입했습니다. 

이번에는 bool값으로 이루어진 list를 ndarray 대괄호 안에 넣어보겠습니다. 

소스 코드

# False, True 를 직접 입력해서 인덱싱 할 수 있습니다. (List도 사용 가능)

var = [False, True, False, False, False,  True,  True,  False,  True]

print(type(var))  # list도 사용가능, np.ndarray도 사용가능

ndarray1d3 = array1d[var]

print("ndarray1d3:", ndarray1d3)

print(type(ndarray1d3))

결과

<class 'list'>
ndarray1d3: [2 6 7 9]
<class 'numpy.ndarray'>

위 내용처럼 사용할 수 있습니다. 

다른 언어에서는 for문을 돌아서 조건을 확인하고, 조건에 충족되면 append 하는 방식으로 진행 했다면, 이번 시간 이후부터는 Boolean 인덱싱을 이용해서 쉽게 새로운 list나 ndarray를 반환할 수 있습니다. 

반응형