이번 포스팅에서는 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 |