넘파이에는 배열에 요소를 검색해 인덱스를 반환하는 np.where가 있습니다.
np.where는 인덱스뿐 아니라 검색 조건을 응용해 True, False 형태로도 사용 가능합니다.
Numpy는 계산속도가 빠르기 때문에 for문이나 if문을 함께 사용하기보다는 단독으로 사용하는 경우가 많습니다.
np.where(
condition – 조건식
x – condition이 True일 경우 반환값
y – condition이 False일 경우 반환값)
첫 번째 인수는 조건식을 지정합니다.
두 번째와 세 번째 인수는 생략 가능합니다.
생략한 경우에는 조건식과 일치하는 요소의 인덱스를 반환합니다.
두 번째, 세 번째 인수를 설정하는 경우에는 둘 다 설정해 줘야 합니다.
조건식과 일치하는 경우에는 x값을 반환하고 일치하지 않는 경우에는 y값을 반환합니다.
numpy where 샘플 데이터
import numpy as np
a = np.arange(10)
b = a.reshape(2,-1)
c = np.arange(20).reshape(4,-1)
d = c.reshape(2,5,-1)
print("a")
print(a)
print("\nb")
print(b)
print("\nc")
print(c)
print("\nd")
print(d)
먼저 배열 요소를 만들어 출력해놓겠습니다.
샘플 데이터표
a
[0 1 2 3 4 5 6 7 8 9]
b
[[0 1 2 3 4]
[5 6 7 8 9]]
c
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
d
[[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]]
[[10 11]
[12 13]
[14 15]
[16 17][18 19]]]
조건식을 만들고 일치하는 요소의 인덱스를 반환하는 예제입니다.
numpy where 예제
import numpy as np
a = np.arange(10)
b = a.reshape(2,-1)
c = np.arange(20).reshape(4,-1)
d = c.reshape(2,5,-1)
print(np.where(a%2==0))
print(np.where(b%2==0))
print(np.where(c%2==0))
print(np.where(d%2==0))
결과
(array([0, 2, 4, 6, 8]),)
(array([0, 0, 0, 1, 1]), array([0, 2, 4, 1, 3]))
(array([0, 0, 0, 1, 1, 2, 2, 2, 3, 3]), array([0, 2, 4, 1, 3, 0, 2, 4, 1, 3]))
(array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1]), array([0, 1, 2, 3, 4, 0, 1, 2, 3, 4]), array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
검색 조건과 일치하는 요소의 인덱스가 반환되어 있습니다.
a의 경우에는 1차원 배열이라 인덱스 값이 1차원 배열 형태이지만 b부터는 결과가 2차원 형태로 출력되었습니다.
b의 인덱스 결과값을 보면 다음과 같습니다.
b[0,0]
b[0,2]
b[0,4]
b[1,1]
b[1,3]
5개 요소가 where 조건과 일치합니다.
이번에는 두 번째 인수와 세 번째 인수를 설정해서 동작을 확인해보겠습니다.
numpy where 예제
import numpy as np
a = np.arange(10)
print(np.where(a%2==0, "짝수", "홀수"))
결과
['짝수' '홀수' '짝수' '홀수' '짝수' '홀수' '짝수' '홀수' '짝수' '홀수']
where에 작성한 조건식과 일치하면 두 번째 인수 값인 “짝수”가 출력되고 조건과 일치하지 않는 경우에는 세 번째 인수 값인 “홀수”가 출력됩니다.
댓글