상위 목록: 하위 목록: 작성 날짜: 읽는 데 15 분 소요

조건 반환(Where)

import numpy as np

array = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

whereDefault = np.where(array > 5)
whereArray = np.where(array > 5, np.max(array), array)

print(array)
print('---------')
print(whereDefault)
print(array[whereDefault])
print(whereArray)
결과
[[1 2 3]
 [4 5 6]
 [7 8 9]]
———
(array([1, 2, 2, 2], dtype=int64), array([2, 0, 1, 2], dtype=int64))
[6 7 8 9]
[[1 2 3]
 [4 5 9]
 [9 9 9]]

조건 반환 함수(np.where)는 배열의 요솟값이 특정 조건에 만족하는 값을 반환하는 함수입니다.

비교 함수(np.greater, np.greater_equal) 등으로도 특정 조건을 만족하는 배열을 반환할 수 있습니다.

하지만, 조건 반환 함수(np.where)는 더 세밀한 조건을 통해 배열의 조건을 검색할 수 있습니다.

np.where(조건식) 또는 np.where(조건식, 참 값, 거짓 값)으로 조건식을 계산합니다.

참 값거짓 값을 입력하지 않은 기본 함수는 조건에 만족하는 배열의 색인값 튜플을 반환합니다.

예시의 whereDefault첫 번째 값의 배열은 행을 의미하며, 두 번째 값의 배열은 열을 의미합니다.

즉, array 배열에서 array > 5를 만족하는 원소값의 색인은 (1, 2), (2, 0), (2, 1), (2, 2)에 위치합니다.

이 색인 배열을 array 배열의 색인값으로 사용한다면, 조건에 만족하는 값인 [6, 7, 8, 9]를 반환합니다.

만약, 참 값거짓 값에 값을 할당하면, 참 값은 np.max(array)9가 되며, 거짓 값은 기본값(array)으로 할당됩니다.



복수 조건

import numpy as np

array = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

whereAnd = np.where((array > 3) & (array < 7), 0, array)
whereOr = np.where((array < 3) | (array > 7), 0, array)

print(whereAnd)
print(whereOr)
결과
[[1 2 3]
 [0 0 0]
 [7 8 9]]
[[0 0 3]
 [4 5 6]
 [7 0 0]]

조건 반환 함수의 조건식참/거짓의 형태을 갖습니다.

그러므로, 조건식 내부에 복합 조건을 사용하기 위해서는 &(AND)|(OR)를 적용해 다양한 조건식을 연결할 수 있습니다.

whereAnd는 3보다 크고, 7보다 작은 값을 0으로 변경합니다.

whereOr는 3보다 작거나, 7보다 큰 값을 0으로 변경합니다.

조건문(if)처럼 andor처럼 사용하여 복잡한 조건식을 구성할 수 있습니다.



심화 검색

import numpy as np

array = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

whereSum = np.where((np.sum(array, axis = 1) > 10).reshape(3, -1), array, 0)
whereSumOdd = np.where((np.sum(array, axis = 1) > 10).reshape(3, -1), np.where( array % 2 == 1, array, 0), 0)

print(whereSum)
print(whereSumOdd)
결과
[[0 0 0]
 [4 5 6]
 [7 8 9]]
[[0 0 0]
 [0 5 0]
 [7 0 9]]

조건 반환 함수(np.where)는 인수에 Numpy 배열 자체를 조건으로 사용하거나, 참 값, 거짓 값에도 조건 반환 함수를 활용할 수 있습니다.

whereSumaxis = 1에 대한 합계가 10을 넘어가는 경우, 해당 행의 값을 모두 0으로 변경하는 조건으로 설정합니다.

위 조건으로 값을 반환할 경우, [1, 2, 3]의 합계는 10을 넘지 못해, 내부의 값은 모두 0으로 변경됩니다.

더 심화된 검색을 진행하는 경우, 조건식을 더 복잡하게 구성해도 됩니다.

하지만, 참 값조건 반환 함수(np.where)를 또다시 적용하는 경우, 조건식을 만족하고 나온 값에 대해 다시 한 번 더 조건식을 적용합니다.

두 번째로 적용된 조건식은 홀수 값만 출력하게 됩니다. 그러므로, whereSum의 값에서 홀수만 출력하게됩니다.

결과는 예제처럼 5, 7, 9만 유지하며, 나머지 값은 모두 0으로 변경합니다.

댓글 남기기