본문 바로가기
파이썬

파이썬 mean, nanmean 및 warning : 빈 슬라이스의 평균

by º기록 2020. 11. 24.
반응형

두 개의 numpy 배열을 구성한다고 가정하십시오.

a = np.array([np.NaN, np.NaN])
b = np.array([np.NaN, np.NaN, 3])

이제 np.mean a b 모두에 대해 nan 을 반환한다는 것을 알았습니다.

>>> np.mean(a)
nan
>>> np.mean(b)
nan


>>> np.nanmean(b)
3.0

그러나 배열에 그러나 nan 값이 없으면 경고가 발생합니다.

>>> np.nanmean(a)
nan
C:\python-3.4.3\lib\site-packages\numpy\lib\nanfunctions.py:598: RuntimeWarning: Mean of empty slice
  warnings.warn("Mean of empty slice", RuntimeWarning)

나는 경고를 억제하는 것을 좋아하지 않습니다. 그 경고없이 nanmean 의 동작을 얻는 데 사용할 수있는 더 나은 기능이 있습니까?

 

해결 방법

 

경고 만 억제하지 않을 이유가 전혀 없습니다.


import numpy as np
import warnings

x = np.ones((1000, 1000)) * np.nan

# I expect to see RuntimeWarnings in this block
with warnings.catch_warnings():
    warnings.simplefilter("ignore", category=RuntimeWarning)
    foo = np.nanmean(x, axis=1)

@dawg의 솔루션도 작동하지만 궁극적으로 모든 NaN 배열에서 np.nanmean 을 계산하지 않기 위해 취해야하는 추가 단계는 피할 수있는 추가 오버 헤드를 발생시킵니다. 경고를 억제하는 것뿐입니다. 또한 귀하의 의도가 코드에 훨씬 더 명확하게 반영됩니다.

 

참조 페이지 https://stackoverflow.com/questions/29688168

 

 

반응형

댓글