Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 NumPy nanmax()로 NaN을 무시하고 축 0 기준 배열의 최댓값 구하기

배열의 최댓값을 반환하거나 NaN(Not a Number) 값을 무시한 채 최댓값을 구하려면 파이썬에서 numpy.nanmax() 메서드를 사용하면 됩니다. 이 메서드는 입력 배열 a와 동일한 형태를 가지되, 지정된 축(axis)이 제거된 배열을 반환합니다. 만약 a가 0차원 배열이거나 axis가 None이면 ndarray 스칼라가 반환되며, 결과의 dtype은 원본 배열과 동일하게 유지됩니다.

numpy.nanmax()의 주요 매개변수

첫 번째 매개변수 a: 최댓값을 구하고자 하는 숫자들을 담고 있는 배열입니다. 배열이 아닌 값이 전달되면 자동으로 변환을 시도합니다.

두 번째 매개변수 axis: 최댓값을 계산할 축 또는 축들의 집합입니다. 기본값은 평탄화(flattened)된 배열 전체에 대한 최댓값을 계산하는 것입니다.

세 번째 매개변수 out: 결과를 저장할 대체 출력 배열입니다. 기본값은 None이며, 값을 지정할 경우 예상 출력과 동일한 형태(shape)여야 하고 필요하다면 타입이 자동으로 변환(cast)됩니다.

네 번째 매개변수 keepdims: True로 설정하면 축소된 축들이 크기 1인 차원으로 결과에 남게 됩니다. 이 옵션을 사용하면 결과가 원본 배열 a와 올바르게 브로드캐스팅(broadcasting)됩니다. 기본값이 아닌 다른 값이 지정되면 keepdims는 ndarray 하위 클래스의 max 메서드에 그대로 전달되며, 하위 클래스가 keepdims를 구현하지 않았다면 예외가 발생할 수 있습니다.

다섯 번째 매개변수 minimum: 출력 요소의 최솟값입니다. 빈 슬라이스(empty slice)에 대한 연산을 허용하기 위해 반드시 존재해야 합니다.

구현 단계

먼저 필요한 라이브러리를 임포트합니다.

import numpy as np

array() 메서드를 사용해 NumPy 배열을 생성합니다. 여기에는 int 타입 요소와 함께 nan 값도 포함시켰습니다.

arr = np.array([[10, 20, 30], [40, np.nan, 60]])

생성한 배열을 화면에 출력합니다.

print("Our Array...\n",arr)

배열의 차원을 확인합니다.

print("\nDimensions of our Array...\n",arr.ndim)

배열 객체의 데이터 타입(dtype)을 확인합니다.

print("\nDatatype of our Array object...\n",arr.dtype)

NaN을 무시하고 배열의 최댓값을 반환하기 위해 numpy.nanmax() 메서드를 사용합니다. 여기서는 축 0(axis=0)을 기준으로 계산했습니다.

print("\nResult (nanmax)...\n",np.nanmax(arr, axis = 0))

전체 예제 코드

import numpy as np

# array() 메서드로 NumPy 배열 생성
# int 타입 요소와 nan 값을 함께 포함
arr = np.array([[10, 20, 30], [40, np.nan, 60]])

# 배열 출력
print("Our Array...\n",arr)

# 차원 확인
print("\nDimensions of our Array...\n",arr.ndim)

# 데이터 타입 확인
print("\nDatatype of our Array object...\n",arr.dtype)

# numpy.nanmax() 메서드로 NaN을 무시한 최댓값 계산
print("\nResult (nanmax)...\n",np.nanmax(arr, axis = 0))

실행 결과

Our Array...
[[10. 20. 30.]
[40. nan 60.]]

Dimensions of our Array...
2

Datatype of our Array object...
float64

Result (nanmax)...
[40. 20. 60.]

실행 결과를 보면, 2행 3열의 float64 타입 배열에서 axis=0(열 방향)을 기준으로 nanmax()를 적용했을 때 각 열별 최댓값인 [40. 20. 60.]이 반환된 것을 확인할 수 있습니다. 특히 두 번째 열의 nan 값은 계산에서 제외되고 나머지 유효한 값들만 비교되어 정확한 결과를 얻을 수 있습니다.