본문 바로가기
  • Hello_
Python/Numpy

[Python] np.where() - 조건 두 개 사용하는 법

by LDwDL 2022. 9. 26.
728x90
반응형

본 포스팅은 넘파이 어레이의 특정 조건에 부합하는 인덱스를 찾아주는 np.where()에 대해 정리할 예정이다.

다만 이전에 포스팅한 내용은 조건 하나의 경우지만 이번에는 두 개의 조건에 동시에 부합하는 경우 어떻게 사용이 되는지 포스팅하겠다.

 

np.where() - AND 연산 (&)

우선 두개의 조건을 둘 다 부합할 경우 즉, AND 논리의 경우 어떻게 np.where()을 사용해야 하는지 예시를 통해 정리하겠다.

 

[np.where((조건_1)&(조건_2)]

import numpy as np

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

np.where(nums > 3)
# (array([3, 4, 5, 6, 7, 8, 9], dtype=int64),)

np.where(nums < 6)
# (array([0, 1, 2, 3, 4], dtype=int64),)

np.where((nums > 3) & (nums < 6)) # 조건별로 괄호!
(array([3, 4], dtype=int64),)

 

3 초과 6 미만의 범위에 있는 수를 뽑기 위해서는 다음과 같이 3 초과, 6 미만의 조건을 &로 묶어서 사용을 하면 된다. 이때 주의할 점은 조건별로 소괄호를 통해 명확히 분리가 되어야 한다.

 

np.where() - OR 연산 (|)

이번에는 둘 중의 조건 중 하나만 부합해도 되는 OR 논리를 구현하고자 한다. 다른 것은 모두 동일하지만 & 대신 | 를 사용해주면 된다. ('|'은 원화 문자 키를 shift 하면 입력이 가능하다.)

 

[np.where((조건_1)|(조건_2))]

np.where(nums < 3)
# (array([0, 1], dtype=int64),)

np.where(nums > 8)
# (array([8, 9], dtype=int64),)

np.where((nums < 3) | (nums > 8))  # 조건별로 괄호!
# (array([0, 1, 8, 9], dtype=int64),)

 

이번에는 3 미만 8 초과 범위의 숫자를 획득하고자 한다. 이 때는 3 미만의 조건과 8 초과의 조건 중 하나라도 부합이 되는 숫자들을 획득하면 되기에 OR 논리를 사용하면 된다. 여기서도 마찬가지로 조건별로 소괄호는 필수이다.

 

 

728x90
반응형

댓글