Numpy 필터 배열
배열 필터링
기존 배열에서 일부 요소를 가져와서 새 배열을 만드는 것을 필터링 이라고 합니다 .
NumPy에서는 부울 인덱스 목록 을 사용하여 배열을 필터링 합니다 .
부울 인덱스 목록 은 배열의 인덱스에 해당하는 부울 목록입니다 .
인덱스의 값이 True
해당 요소이면 필터링된 배열에 포함되고 해당 인덱스의 값이
False
해당 요소이면 필터링된 배열에서 제외됩니다.
예시
인덱스 0과 2의 요소에서 배열을 만듭니다.
import numpy as np
arr = np.array([41, 42, 43, 44])
x = [True,
False, True, False]
newarr = arr[x]
print(newarr)
위의 예는 [41, 43]
, 그 이유는 무엇입니까?
새 필터에는 필터 배열에 값이 있는 값만 포함되기 때문에
True
이 경우에는 인덱스 0과 2입니다.
필터 배열 생성
위의 예에서 우리는 True
및 False
값을 하드 코딩했지만 일반적으로 조건을 기반으로 필터 배열을 만드는 데 사용됩니다.
예시
42보다 큰 값만 반환하는 필터 배열을 만듭니다.
import numpy as np
arr = np.array([41, 42, 43, 44])
#
Create an empty list
filter_arr = []
# go through each element in
arr
for element in arr:
# if the element is higher than 42, set
the value to True, otherwise False:
if element > 42:
filter_arr.append(True)
else:
filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)
예시
원래 배열에서 짝수 요소만 반환하는 필터 배열을 만듭니다.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
#
Create an empty list
filter_arr = []
# go through each element in
arr
for element in arr:
# if the element is completely divisble
by 2, set the value to True, otherwise False
if element % 2 == 0:
filter_arr.append(True)
else:
filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)
배열에서 직접 필터 생성
위의 예는 NumPy에서 매우 일반적인 작업이며 NumPy는 이를 해결할 수 있는 좋은 방법을 제공합니다.
조건에서 반복 가능한 변수 대신 배열을 직접 대체할 수 있으며 예상대로 작동합니다.
예시
42보다 큰 값만 반환하는 필터 배열을 만듭니다.
import numpy as np
arr = np.array([41, 42, 43, 44])
filter_arr = arr
> 42
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)
예시
원래 배열에서 짝수 요소만 반환하는 필터 배열을 만듭니다.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
filter_arr = arr
% 2 == 0
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)