달나라 노트

Python numpy : minimum() / maximum() — 두 array를 element-wise로 비교해 작은/큰 값을 선택하는 메서드 본문

Python/Python numpy

Python numpy : minimum() / maximum() — 두 array를 element-wise로 비교해 작은/큰 값을 선택하는 메서드

CosmosProject 2026. 5. 14. 20:21
728x90
반응형

NumPy minimum() / maximum() — 두 array를 element-wise로 비교해 작은/큰 값을 선택하는 메서드

두 array의 같은 위치 값을 비교해서, 더 작은(또는 큰) 값만 골라 새 array를 만듭니다.

기본 문법

numpy.minimum(x1, x2)   # 각 위치에서 더 작은 값 선택
numpy.maximum(x1, x2)   # 각 위치에서 더 큰 값 선택

np.min() vs np.minimum() — 헷갈리기 쉬운 차이

이름이 비슷하지만 완전히 다릅니다.

arr = np.array([3, 1, 4, 1, 5])

np.min(arr)         # 1  ← array 전체에서 최솟값 하나 반환
np.minimum(arr, 3)  # array([3, 1, 3, 1, 3])  ← 각 위치를 3과 비교
np.min(arr) np.minimum(x1, x2)
입력 array 1개 array 2개 (또는 array + scalar)
출력 스칼라 값 1개 array
역할 전체 최솟값 찾기 element-wise 비교

예시 1 — 두 array 비교

import numpy as np

a = np.array([1, 5, 3, 8, 2])
b = np.array([4, 2, 6, 1, 7])

np.minimum(a, b)
# array([1, 2, 3, 1, 2])
#  min(1,4) min(5,2) min(3,6) min(8,1) min(2,7)

np.maximum(a, b)
# array([4, 5, 6, 8, 7])
#  max(1,4) max(5,2) max(3,6) max(8,1) max(2,7)

예시 2 — scalar와 비교 (상한/하한 설정)

arr = np.array([-3, 5, -1, 8, 2])

np.maximum(arr, 0)   # 하한 0 설정 (음수 제거)
# array([0, 5, 0, 8, 2])

np.minimum(arr, 5)   # 상한 5 설정
# array([-3, 5, -1, 5, 2])

np.clip()과의 관계

상한과 하한을 동시에 설정할 때 clip()이 더 간결하지만, 내부적으로 minimummaximum의 조합입니다.

arr = np.array([-3, 5, -1, 8, 2])

# 아래 두 코드는 같은 결과
np.clip(arr, 0, 5)
np.minimum(np.maximum(arr, 0), 5)
# array([0, 5, 0, 5, 2])

NaN 처리

np.minimum / np.maximum은 NaN이 있으면 결과도 NaN이 됩니다. NaN을 무시하려면 np.fmin / np.fmax를 씁니다.

a = np.array([1, np.nan, 3])
b = np.array([2, 2,      1])

np.minimum(a, b)
# array([ 1., nan,  1.])  ← NaN이 있으면 결과도 NaN

np.fmin(a, b)
# array([1., 2., 1.])     ← NaN 무시하고 다른 값 선택

np.fmin() / np.fmax() — NaN을 무시하는 버전

np.minimum / np.maximum과 동작이 같지만, NaN을 결측값으로 취급해서 무시합니다.

a = np.array([1, np.nan, 3, np.nan])
b = np.array([2, 2,      1, np.nan])

np.minimum(a, b)
# array([ 1., nan,  1., nan])  ← NaN이 하나라도 있으면 결과도 NaN

np.fmin(a, b)
# array([ 1.,  2.,  1., nan])  ← 한쪽만 NaN이면 다른 값 선택
#                        ↑ 둘 다 NaN이면 그때만 NaN
NaN 처리 규칙: 한쪽만 NaN → NaN이 아닌 값 선택 / 둘 다 NaN → NaN 반환

데이터에 결측값이 섞여 있을 때, NaN 때문에 비교 결과 전체가 오염되는 걸 막고 싶을 때 씁니다.

# 센서 데이터 — 일부 측정값이 누락(NaN)된 상황
sensor_a = np.array([23.1, np.nan, 19.8, 21.0])
sensor_b = np.array([22.0, 20.5,   np.nan, 21.5])

# 두 센서 중 낮은 값을 기록하되, 한쪽이 누락이면 다른 쪽 값 사용
np.fmin(sensor_a, sensor_b)
# array([22. , 20.5, 19.8, 21. ])
np.minimum np.fmin
한쪽 NaN NaN 반환 다른 값 반환
둘 다 NaN NaN 반환 NaN 반환
용도 NaN 전파가 필요할 때 NaN을 무시하고 싶을 때
728x90
반응형
Comments