데이터 분석을 하다 보면 배열에 조건을 걸어 필터링하거나 논리 연산을 자주 하게 됩니다.
이럴 때 NumPy
를 쓰면 굉장히 간단하게 처리할 수 있는데요, 그럼 꼭 NumPy를 써야만 할까요?
이번 포스트에서는 NumPy를 쓸 때와 쓰지 않을 때를 비교해보며,
기본 파이썬만으로도 동일한 기능을 어떻게 구현할 수 있는지 정리해보겠습니다.
먼저 두 가지 버전의 코드를 소개합니다.
# Create arrays
import numpy as np
my_house = np.array([18.0, 20.0, 10.75, 9.50])
your_house = np.array([14.0, 24.0, 14.25, 9.0])
# my_house greater than 18.5 or smaller than 10
print(np.logical_or(my_house > 18.5, my_house < 10))
# Both my_house and your_house smaller than 11
print(np.logical_and(my_house < 11, your_house < 11))
# 데이터 정의 (리스트로)
my_house = [18.0, 20.0, 10.75, 9.50]
your_house = [14.0, 24.0, 14.25, 9.0]
# 1. my_house 원소가 18.5보다 크거나 10보다 작은지
result1 = [(x > 18.5) or (x < 10) for x in my_house]
print(result1) # [False, True, False, True]
# 2. my_house와 your_house 모두 11보다 작은지
result2 = [(m < 11) and (y < 11) for m, y in zip(my_house, your_house)]
print(result2) # [False, False, False, True]
조건 내용 | NumPy 결과 | 리스트 버전 결과 |
---|---|---|
my_house > 18.5 or my_house < 10 | [False True False True] | [False, True, False, True] |
my_house < 11 and your_house < 11 | [False False False True] | [False, False, False, True] |
결과는 논리적으로 동일하지만,
NumPy는 np.logical_or
과 벡터 연산을 통해 처리하고,
기본 파이썬은 리스트 컴프리헨션과 zip
을 통해 처리한다는 점이 다릅니다.
np.array
)arr > 10
)mean
, sum
, sqrt
, ...)list
)[1, "hi", True]
)NumPy는 수치 계산과 배열 처리를 빠르게 도와주는 강력한 도구입니다.
하지만 단순한 조건 필터링이라면 굳이 NumPy를 쓰지 않고도 기본 파이썬 리스트 + 리스트 컴프리헨션으로도 충분히 처리할 수 있습니다.
상황에 따라 적절한 도구를 쓰는 것이 중요합니다.
간단한 작업은 리스트, 복잡한 수치 계산은 NumPy!
NumPy에서 나오는 [False True False True]
같은 결과는
np.bool_
타입이지만, 기본 파이썬의 True
/False
와 동일하게 작동합니다.
단지 출력 형태와 내부 타입만 다를 뿐이에요.
궁금한 점이나 추가 예제가 필요하면 댓글로 남겨 주세요! 🙂