API · NumPy
Python Numpy.where() 함수
numpy where() 함수는 입력 배열의 요소를 확인하고 지정된 조건에 따라 출력을 생성합니다.
이 페이지의 내용
numpy.where()에는 결과가 서로 다른 두 가지 형식이 있습니다. numpy.where(condition)으로 호출하면 조건이 참인 위치의 인덱스 배열을 반환합니다. numpy.where(condition, x, y)로 호출하면 각 요소마다 x 또는 y의 값을 선택합니다. 일치하는 위치를 찾으려면 첫 번째 형식을, 조건에 따라 배열을 만들려면 두 번째 형식을 사용하세요.
numpy.where()는 인덱스를 반환하거나 값을 선택합니다
확인하거나 다른 연산에 사용할 위치가 필요하다면 condition만 지정하는 형식을 선택하세요. 결과값이 조건에 따라 달라지는 배열이 필요하다면 인수를 세 개 지정하는 형식을 선택하세요. 조건에 따라 결과의 각 요소에 사용할 값이 결정됩니다. 조건이 참이면 x에서, 거짓이면 y에서 값을 가져옵니다.
numpy.where()의 구문과 매개변수
호출 형식은 numpy.where(condition)과 numpy.where(condition, x, y)입니다. condition 인수에는 결과를 결정하는 참·거짓 값이 들어 있는 배열과 유사한 값을 지정합니다. 인수를 세 개 지정하는 형식에서는 조건이 참인 위치의 값을 x에서 가져오고, 거짓인 위치의 값은 y에서 가져옵니다. x와 y는 함께 전달해야 하며, 하나만 따로 전달할 수 없습니다. 인덱스가 필요하면 둘 다 생략하세요.
자세한 내용은 numpy.where()에 관한 NumPy 1.18 문서를 참조하세요. 이 글에서는 두 호출 형식과 아래 예제를 다루며, 모든 배열 모양 조합을 설명하지는 않습니다.
numpy.where(condition)으로 일치하는 인덱스 찾기
1차원 조건의 결과는 정수 배열 하나를 담은 튜플입니다. 이 정수는 입력 배열에서의 위치이며, 해당 위치에서 찾은 값 자체가 아닙니다. 원본 배열을 인덱싱할 때는 튜플 결과를 그대로 사용하고, 인덱스 배열만 필요할 때는 튜플의 첫 번째 항목을 사용하세요.
다음 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
import numpy as np
values = np.array([4, 9, 12, 7, 15])
matching_positions = np.where(values > 10)
print(matching_positions)
Python의 0부터 시작하는 인덱싱을 기준으로 이 조건은 위치 2와 4에서 참입니다. 따라서 반환된 인덱스 배열은 값이 일치한 위치를 나타냅니다. 인덱스 배열 자체에 12와 15가 들어 있는 것은 아닙니다.
numpy.where(condition, x, y)로 값 선택하기
인수를 세 개 지정하는 형식은 위치가 아니라 선택된 값을 반환합니다. 각 위치에서 조건이 참이면 x의 해당 값을 가져오고, 거짓이면 y의 값을 가져옵니다. 예를 들어 임계값을 통과하지 못한 값은 바꾸고 통과한 값은 유지할 때 유용합니다.
다음 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
import numpy as np
scores = np.array([42, 81, 67, 95])
labels = np.where(scores >= 70, "pass", "review")
print(labels)
여기서는 각 점수를 70과 비교합니다. 결과에는 임계값 이상인 점수에 대해 "pass"가, 나머지 점수에 대해 "review"가 들어갑니다. 이 호출 형식에서는 두 대안 값을 모두 제공해야 합니다. 코드 예제의 pass와 review 문자열 레이블은 바이트 단위로 보존되어 영어로 표시됩니다.
다차원 배열에서 numpy.where() 사용하기
같은 선택 규칙을 2차원 조건에도 각 위치별로 적용할 수 있습니다. 출력의 각 위치는 x 또는 y의 대응하는 위치에서 선택됩니다. 따라서 인수를 세 개 지정하는 형식은 행과 열의 배열 구조를 유지하면서 행렬을 변환할 때 유용합니다.
다음 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
import numpy as np
values = np.array([[10, 25, 30], [18, 50, 5]])
replacement = np.full(values.shape, -1)
selected = np.where(values > 20, values, replacement)
print(selected)
조건은 모든 요소를 검사합니다. 20보다 큰 값은 결과에 그대로 남고, 나머지 위치에는 replacement의 대응하는 -1이 들어갑니다. 출력은 입력의 2차원 배열 구조를 유지합니다.
numpy.where()에서 조건 결합하기
요소별 비교 조건을 결합하려면 각 비교식을 괄호로 묶고, 두 조건이 모두 참이어야 할 때는 &로, 하나 이상이 참이면 될 때는 |로 연결하세요. 이 연산자는 배열 조건에 사용됩니다. Python의 스칼라 and와 or 연산자는 요소별 배열 비교 조건을 결합하는 데 대신 사용할 수 없습니다.
다음 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
import numpy as np
values = np.array([1, 2, 3, 4, 5])
in_range = (values > 1) & (values < 5)
selected = np.where(in_range, values, 0)
print(selected)
결합한 조건은 2, 3, 4에서 참이므로 해당 값은 유지되고, 그 범위 밖의 위치에는 0이 들어갑니다. 둘 중 하나를 만족하는 조건을 만들려면 (values < 2) | (values > 4)처럼 괄호로 묶은 비교식 사이에 |를 사용하세요. 각 비교식은 참·거짓 값의 배열을 만들고, numpy.where()는 각 위치에 선택한 분기를 적용합니다.