Python Numpy 강좌 : 제 15강 - 조건 반환

Python Numpy Where

Python Numpy 강좌 : 제 15강 - 조건 반환
[ Python-Numpy ] - 윤대희

조건 반환(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으로 변경합니다.





Book Image

개정판이 출간됐습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (개정판)

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]

    후원하기


    ⤧  Previous post Python Numpy 강좌 : 제 14강 - 이어 붙이기 ⤧  Next post Python Numpy 강좌 : 제 16강 - 다항식 계산 (1)
    Python-Numpy Category