수색…
부울 배열로 데이터 필터링하기
numpy의 where
함수에 하나의 인수 만 제공되면 함수는 true로 평가되는 입력 배열 ( condition
)의 인덱스를 반환합니다 ( numpy.nonzero
와 동일한 동작). 주어진 조건을 만족하는 배열의 인덱스를 추출하는 데 사용할 수 있습니다.
import numpy as np
a = np.arange(20).reshape(2,10)
# a = array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])
# Generate boolean array indicating which values in a are both greater than 7 and less than 13
condition = np.bitwise_and(a>7, a<13)
# condition = array([[False, False, False, False, False, False, False, False, True, True],
# [True, True, True, False, False, False, False, False, False, False]], dtype=bool)
# Get the indices of a where the condition is True
ind = np.where(condition)
# ind = (array([0, 0, 1, 1, 1]), array([8, 9, 0, 1, 2]))
keep = a[ind]
# keep = [ 8 9 10 11 12]
인덱스가 필요하지 않은 경우 extract
사용하여 한 단계에서 수행 할 수 있습니다. 여기서 condition
은 첫 번째 인수로 condition
을 지정하지만 array
에 두 번째 인수로 조건이 참인 값을 반환하도록 지정합니다.
# np.extract(condition, array)
keep = np.extract(condition, a)
# keep = [ 8 9 10 11 12]
두 개의 추가 인수 x
및 y
를 where
제공 할 수 있습니다.이 경우 출력에는 조건이 True
인 x
값과 조건이 False
인 y
값이 포함됩니다.
# Set elements of a which are NOT greater than 7 and less than 13 to zero, np.where(condition, x, y)
a = np.where(condition, a, a*0)
print(a)
# Out: array([[ 0, 0, 0, 0, 0, 0, 0, 0, 8, 9],
# [10, 11, 12, 0, 0, 0, 0, 0, 0, 0]])
인덱스 직접 필터링
단순한 경우 데이터를 직접 필터링 할 수 있습니다.
a = np.random.normal(size=10)
print(a)
#[-1.19423121 1.10481873 0.26332982 -0.53300387 -0.04809928 1.77107775
# 1.16741359 0.17699948 -0.06342169 -1.74213078]
b = a[a>0]
print(b)
#[ 1.10481873 0.26332982 1.77107775 1.16741359 0.17699948]
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow