NumPy 배열의 필터 요소

Vaibhav Vaibhav 2023년1월30일
  1. NumPy에서fromiter()메소드를 사용하여 요소 필터링
  2. NumPy에서 부울 마스크 슬라이싱 방법을 사용하는 필터 요소
  3. NumPy에서where()메서드를 사용하여 요소 필터링
NumPy 배열의 필터 요소

종종 우리는 특정 배열의 값이 필요합니다. 일반적으로 오름차순이나 내림차순입니다. 때로는 배열에서 요소를 검색하고이를 검색하거나 일부 조건에 따라 일부 값을 필터링해야합니다.

이 기사에서는 NumPy 배열에서 값을 필터링하는 방법을 소개합니다.

NumPy에서fromiter()메소드를 사용하여 요소 필터링

fromiter()는 인수로 전달되는 반복 가능한 객체에서 새로운 1 차원 배열을 만듭니다. 입력 배열 요소에 조건을 적용하고이 함수에 새 배열을 추가하여 NumPy 배열에서 원하는 요소를 가져올 수 있습니다.

fromiter()메소드의 구문은 다음과 같습니다.

fromiter(iterable, dtype, count, like)

다음과 같은 매개 변수가 있습니다.

  • iterable - 함수가 반복 할 반복 가능한 객체입니다.
  • dtype - 이 매개 변수는 반환 된 배열의 데이터 유형을 나타냅니다.
  • count - 선택적인 정수 매개 변수이며 반복 가능한 객체에서 읽을 요소의 수를 나타냅니다. 이 매개 변수의 기본값은-1이며, 이는 모든 요소를 ​​읽음을 의미합니다.
  • like - 선택적 부울 매개 변수입니다. 반환 된 배열의 정의를 제어합니다.

NumPy에서fromiter()메소드를 사용하여 요소를 필터링하는 방법은 다음과 같습니다.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray = np.fromiter(
    (element for element in myArray if element < 6), dtype=myArray.dtype
)
print(myArray)
print(newArray)

출력:

[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]

먼저 요소를 필터링하려는 NumPy 배열을 초기화합니다. 그런 다음 전체 배열을 반복하고6보다 작은 값을 필터링합니다. 그런 다음이 새 배열을 원래 배열과 동일한 데이터 유형을 가진 NumPy 배열로 캐스트합니다.

이 방법에 대한 자세한 내용은 공식 문서를 참조하십시오.

NumPy에서 부울 마스크 슬라이싱 방법을 사용하는 필터 요소

이 방법은 약간 이상하지만 NumPy의 매력처럼 작동합니다. 배열 뒤의 대괄호 또는 대괄호[]안의 조건을 언급해야합니다. 그런 다음 NumPy는 조건에 따라 요소를 필터링하고 새 필터링 된 배열을 반환합니다.

이 개념은 명확하지 않고 까다로워 보일 수도 있지만 걱정하지 마십시오. 좀 더 잘 설명하기 위해 아래에 몇 가지 예가 있습니다.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = myArray[myArray < 6]  # Line 1
newArray2 = myArray[myArray % 2 == 0]  # Line 2
newArray3 = myArray[myArray % 2 != 0]  # Line 3
newArray4 = myArray[np.logical_and(myArray > 1, myArray < 5)]  # Line 4
newArray5 = myArray[np.logical_or(myArray % 2 == 0, myArray < 5)]  # Line 5
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)
print(newArray4)
print(newArray5)

출력:

[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]
[2 4 6 8]
[1 3 5 7 9]
[2 3 4]
[1 2 3 4 6 8]

위에서 언급했듯이 대괄호 사이에 몇 가지 조건을 추가하고 해당 조건을 기반으로 대상 배열을 필터링했습니다. 배열을 저장하는 변수 (이 경우myArray)는 대괄호 안에있는 배열의 단일 요소를 나타냅니다.

여러 조건을 적용하고 논리 연산자를 사용하기 위해 논리and또는or에 대해 각각logical_and()logical_or()라는 두 가지 NumPy 메서드를 사용합니다.

  • myArray < 6 - 6보다 작은 값을 필터링합니다.
  • myArray % 2 == 0 - 2로 나눌 수있는 값을 필터링합니다.
  • myArray % 2 != 0 - 2로 나눌 수없는 값을 필터링합니다.
  • np.logical_and(myArray > 1, myArray < 5) - 1보다 크고 5보다 작은 값을 필터링합니다.
  • np.logical_or(myArray % 2 == 0, myArray < 5) - 2로 나눌 수 있거나 5보다 작은 값을 필터링합니다.

NumPy에서where()메서드를 사용하여 요소 필터링

다음은 NumPy 라이브러리의where()메소드를 사용하는 마지막 메소드입니다. 조건에 따라 대상 배열에서 요소를 필터링하고 필터링 된 요소의 인덱스를 반환합니다.

이 방법을 사용하여 조건을 충족하는 요소의 값을 변경할 수도 있습니다.

where()메소드의 구문은 다음과 같습니다.

where(condition, x, y)

다음과 같은 매개 변수가 있습니다.

  • condition - 배열의 각 요소를 검사하는 부울 조건입니다.
  • x - 조건을 만족하는 요소에 부여되는 값 또는 만족하는 요소에 대한 계산입니다.
  • y - 조건을 만족하지 않는 요소에 부여되는 값 또는 만족스럽지 않은 요소에 대한 계산입니다.

이 함수를 사용하여 요소를 필터링하는 방법을 살펴 보겠습니다.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = myArray[np.where(myArray < 7)[0]]
newArray2 = myArray[np.where(myArray % 2 == 0)[0]]
newArray3 = myArray[np.where(myArray % 2 != 0)[0]]
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)

출력:

[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6]
[2 4 6 8]
[1 3 5 7 9]

위의 스 니펫에서 조건을 충족하는 모든 요소가 배열로 반환되었습니다.

where()함수는 NumPy 배열의 튜플을 반환합니다. 그래서 우리는 우리의 대답 인 첫 번째 배열만을 고려합니다.

위에서 언급했듯이 사용자 지정 값을 할당하고 지정된 조건을 충족하는 경우와 그렇지 않은 경우 요소에 대해 사용자 지정 작업을 수행 할 수도 있습니다.

아래는 그 예입니다.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = np.where(myArray < 7, 5, -1)
newArray2 = np.where(myArray % 2 == 0, myArray ** 2, 0)
newArray3 = np.where(myArray % 2 != 0, myArray, -1)
newArray4 = np.where(myArray % 2 != 0, myArray, myArray)
newArray5 = np.where(myArray % 2 != 0, 0, myArray)
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)
print(newArray4)
print(newArray5)

출력:

[1 2 3 4 5 6 7 8 9]
[ 5  5  5  5  5  5 -1 -1 -1]
[ 0  4  0 16  0 36  0 64  0]
[ 1 -1  3 -1  5 -1  7 -1  9]
[1 2 3 4 5 6 7 8 9]
[0 2 0 4 0 6 0 8 0]

출력을 살펴보십시오. 조건 및where()함수에 대한 요소를 조작하기 위해 제공 한 값 및 계산을 기반으로 요소가 어떻게 변경되는지 확인하십시오.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.