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()
함수에 대한 요소를 조작하기 위해 제공 한 값 및 계산을 기반으로 요소가 어떻게 변경되는지 확인하십시오.