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입니다.


필터 배열 생성

위의 예에서 우리는 TrueFalse값을 하드 코딩했지만 일반적으로 조건을 기반으로 필터 배열을 만드는 데 사용됩니다.

예시

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)