NumPy 배열 필터링

배열 필터링

존재하는 배열에서 일부 요소를 꺼내서 새 배열을 생성하는 것을 필터링(filtering)라고 합니다。

NumPy에서는 부울 인덱스 목록을 사용하여 배열을 필터링합니다。

부울 인덱스 목록은 배열의 인덱스와 일치하는 부울 값 목록입니다。

인덱스에 있는 값이 True그럼 그 요소는 필터된 배열에 포함됩니다;인덱스에 있는 값이 False그럼 그 요소는 필터된 배열에서 제외됩니다。

예제

인덱스 0과 2, 4에 있는 요소로 배열을 생성하면:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
x = [True, False, True, False, True]
newarr = arr[x]
print(newarr)

실행 예제

위의 예제는 다음을 반환합니다 [61, 63, 65]그 이유는 무엇인가요?

새 필터는 필터 배열에 값이 있는 필터만 포함하기 때문에 True 의 값을 설정했기 때문에, 이 경우 인덱스는 0과 2, 4입니다.

필터 배열을 생성

위의 예제에서 우리는 TrueFalse 값은 고정되어 있지만, 일반적으로 조건에 따라 필터 배열을 생성하는 용도로 사용됩니다。

예제

62보다 큰 값만 반환하는 필터 배열을 생성하려면:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
# 빈 리스트를 생성합니다
filter_arr = []
# arr의 각 요소를 순회합니다
for element in arr:
  # 만약 요소가 62보다 크다면, 값이 True로 설정되며, 그렇지 않으면 False로 설정됩니다:
  if element > 62:
    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])
# 빈 리스트를 생성합니다
filter_arr = []
# arr의 각 요소를 순회합니다
for element in arr:
  # 요소가 2로 나누어 떨어지면 True로 설정하고, 그렇지 않으면 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는 이 문제를 해결하는 좋은 방법을 제공합니다.

조건에서 배열을 iterable 변수 대신 바로 대체할 수 있으며, 예상대로 작동합니다.

예제

62보다 큰 값만 반환하는 필터 배열을 생성하려면:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
filter_arr = arr > 62
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)

실행 예제