본문 바로가기

Python

Numpy 사용법 (5) - np.where()

이번 포스팅에서는 np.where()에 대해서 알아보겠다. 

 

np.where()로 가장 먼저 할 수 있는 것은 배열내에 특정 조건을 만족하는 원소의 index를 찾아내는 것이다. 

 

☞ np.where()를 이용한 배열내 원소의 index 찾기 예재 코드

import numpy as np
tmp = np.array([2,3,6,7,10,13,14])       # 배열 tmp를 생성
print(tmp)

test1 = np.where(tmp<10) # 배열 tmp에서 10보다 작은 원소의 index를 반환하는 배열을 생성

print(test1[0])

test2 = np.where(tmp%2==0) # 배열 tmp에서 2의 배수인 원소의 index를 반환하는 배열을 생셩

print(test2[0])

 

☞ np.where()를 이용한 배열내 원소의 index 찾기 코드 실행 결과

[ 2 3 6 7 10 13 14]  
[0 1 2 3]   # 10보다 작은 원소는 2,3,6,7이며 각 원소의 인덱스는 0, 1, 2, 3임.
[0 2 4 6]  # 2의 배수인 원소는 2, 3, 6, 10, 14이며 각 원소의 인덱스틑 0, 2, 4, 6임.

 

 

np.where()로 특정 조건을 만족했을때, 어떤 값으로 대체하는 것도 가능하다. 

 

☞ np.where()를 이용해서 특정 값을 반환하기 예제코드

import numpy as np 
tmp = np.array([2,3,6,7,10,13,14])       # 배열 tmp를 생성

tmp1 = np.where(tmp<7, tmp,1)     # tmp의 원소가 7보다 작으면 tmp를 그대로 반환, 아니면 1을 반환
print(tmp1)

tmp2 = np.where(tmp<7, tmp, 2*tmp)     # tmp의 원소가 7보다 작으면 tmp를 반환, 아니면 tmp*2를 반환
print(tmp2)

tmp3 = np.where(tmp<10, 1, 2)     # tmp의 원소가 7보다 작으면 0을 반환, 아니면 9를 반환
print(test6)

 

☞ np.where()를 이용해서 특정 값을 반환하기 예제코드 실행결과

[2 3 6 1 1 1 1]       # tmp의 원소가 7보다 큰 원소의 자리의 원소에 '1'을 반환
[ 2 3 6 14 20 26 28]   # tmp의 원소가 7보다 큰 원소의 자리의 원소에 tmp*2를 반환
                                     # 예를 들어 7보다 큰 원소인 10의 자리에 2배가 큰 20이 반환됨.
[1 1 1 1 2 2 2]              # tmp의 원소가 7보다 작은 자리에는 '1', 큰자리에는 '2'를 반환

 

 

np.where()를 2차원 배열에 적용했을때 어떤식으로 사용이 가능한지도 알아보자. 

 

☞ np.where()를 2차원 배열 적용 예제 코드

mat = np.array([[0,1,2],[0,2,4],[0,3,6]])    # mat이라는 배열을 정의    
mat_where = np.where(mat<4, mat, -1)    # 배열 mat의 원소 중 4보다 큰 값에서는 -1을 반환
print(mat)
print(mat_where)
print()

a = np.array([1,2,3,4])
b = np.array([2,0,1,4])
test = np.where(a<b, a, b+10)  # 배열 a,b의 원소를 1:1로 비교하는데, a의 원소가 크면 a를 반환, 아니면 b+10을 반환
print(test)
print()

a1 = np.array([[2],[3],[4]])
b1 = np.array([1,2,3])
test1 = np.where(a1<b1, a1, b1+10)  # a1이 3 by 1 배열로 첫번째 열과 b1을 비교하여 조건에 맞게 a1 또는 b1+10을 반환
print(test1)

 

np.where()를 2차원 배열 적용 예제 코드 실행 결과

[[0 1 2]   # 배열 mat을 출력
[0 2 4]
[0 3 6]]
[[ 0 1 2]  # 배열 mat_where을 출력
[ 0 2 -1]
[ 0 3 -1]]

[ 1 10 11 14]   # 배열 test를 출력
 
[[11 12 2]   # 배열 test1를 출력
[11 12 13]
[11 12 13]]

2차원 배열에서 적용되는 예제 코드 중 마지막 부분이 조금 어려운데, 천천히 살펴보면 어떤식으로 함수가 

실행되는지 충분히 이해할 수 있을 것이다. 

'Python' 카테고리의 다른 글

CPLEX - Python API  (0) 2022.06.23
Numpy 사용법 (6) - np.argmax(), np.argsort()  (0) 2022.04.23
Numpy 사용법 정리(4)  (0) 2022.04.21
Numpy 사용법 정리(3)  (0) 2022.04.21
Numpy 사용법 정리(2)  (0) 2022.04.20