기록하는 습관

[Numpy] 009. 불리언 배열 (Boolean Array) 본문

Python/Numpy

[Numpy] 009. 불리언 배열 (Boolean Array)

Avalla 2023. 8. 9. 16:47

불리언 배열 (Boolean Array)

import numpy as np

배열을 사용한 조건문에서도 브로드캐스팅이 일어난다.

a = np.arange(10).reshape(2,5)
print( a )
print( a < 5 )
[[0 1 2 3 4]
 [5 6 7 8 9]]
[[ True  True  True  True  True]
 [False False False False False]]

np.any() & np.all()

array = np.arange(10)
print( array )
print( array < 5 )
print( np.any(array < 5) )
print( np.all(array < 5) )
[0 1 2 3 4 5 6 7 8 9]
[ True  True  True  True  True False False False False False]
True
False

shape이 같은 배열끼리 비교가 가능하다.

a = np.array([1,5,0], float)
b = np.array([4,3,0], float)
print( a > b )
print( a == b )
print( a < b )
print( (a < b).any() )
print( np.any(a < b) )
[False  True False]
[False False  True]
[ True False False]
True
True

np.logical_and(논리배열, 논리배열)

a = np.arange(5)
print( np.logical_and(a > 0, a < 3) )
print( np.logical_or(a < 1, a > 3) )
[False  True  True False False]
[ True False False False  True]

np.where(조건, 참값, 거짓값)

데이터 전처리에 유용하게 쓰이는 함수

a = np.arange(0, 110, 10)
print( a )
print( np.where(a >= 70, "합격", "불합격") )
[  0  10  20  30  40  50  60  70  80  90 100]
['불합격' '불합격' '불합격' '불합격' '불합격' '불합격' '불합격' '합격' '합격' '합격' '합격']

np.isnan(배열), np.isfinite(배열)

pandas의 .isna()와 헷갈리지만 numpy는 숫자를 다루므로 'not a number'를 의미하는 nan이다.

is-finite 함수는 is-infinite(이런 함수는 없음)과 헷갈리지 않도록 하자.

a = np.array([np.nan,0,1,np.inf])
print( a )
print( np.isnan(a) )
print( np.isfinite(a) ) # nan 값도 finite하지 않게 취급
print( a < np.inf ) # nan 값은 어떤 값과 비교해도 False
print( 0 < a)
[nan  0.  1. inf]
[ True False False False]
[False  True  True False]
[False  True  True False]
[False False  True  True]

Boolean Index (Masking)

배열[ 논리배열 ]

배열 요소들 중에서 특정 조건을 만족하는 요소들만 선택하는 기법

array = np.arange(6).reshape(2,3)
print( array )
print( "array[array > 0] :", array[array > 0] )
print( array[np.array([[True, True, False], [True, True, False]])] )
[[0 1 2]
 [3 4 5]]
array[array > 0] : [1 2 3 4 5]
[0 1 3 4]
array = np.array([[5,0,-4],[2,-3,-6],[-1,-4,9]])
print( array )
print( array < 0 )
print( array[array < 0] )
[[ 5  0 -4]
 [ 2 -3 -6]
 [-1 -4  9]]
[[False False  True]
 [False  True  True]
 [ True  True False]]
[-4 -3 -6 -1 -4]