이 글에서는 NumPy 배열에서 주어진 범위에 속하는 요소들을 찾아 출력하는 방법을 알아봅니다. 이를 위해 numpy.where()와 numpy.logical_and() 두 가지 함수를 활용합니다.
동작 원리
두 함수는 다음과 같이 함께 작동합니다.
- np.logical_and(): 두 조건(예: 4 이상, 20 이하)을 동시에 만족하는 요소에 대해 불리언 마스크를 생성합니다.
- np.where(): 해당 불리언 마스크에서 True인 위치의 인덱스를 반환합니다.
알고리즘
1. NumPy 배열을 정의합니다.
2. np.where()와 np.logical_and()를 사용해 주어진 범위 내의 숫자를 찾습니다.
3. 결과를 출력합니다.
예제 코드
import numpy as np
arr = np.array([1,3,5,7,10,2,4,6,8,10,36])
print("Original Array:\n",arr)
result = np.where(np.logical_and(arr>=4, arr<=20))
print(result)실행 결과
Original Array: [ 1 3 5 7 10 2 4 6 8 10 36] (array([2, 3, 4, 6, 7, 8, 9], dtype=int64),)
결과 해석
출력된 결과는 값 자체가 아니라, np.where()의 조건을 만족하는 요소들의 인덱스 위치입니다. 위 예제에서 인덱스 2, 3, 4, 6, 7, 8, 9에 해당하는 값들(5, 7, 10, 4, 6, 8, 10)이 모두 4 이상 20 이하 범위에 포함됩니다.
참고: 실제 값을 추출하려면?
인덱스가 아닌 실제 요소 값을 얻고 싶다면 불리언 인덱싱을 직접 사용하는 것이 더 간단합니다.
result = arr[(arr>=4) & (arr<=20)] print(result) # [ 5 7 10 4 6 8 10]
이처럼 & 연산자로 두 조건을 결합하면 범위 내의 실제 값들이 배열 형태로 바로 반환됩니다.