반응형
mean, nanmean 및 warning : 빈 슬라이스의 평균
두 개의 numpy 배열을 구성한다고 가정하십시오.
a = np.array([np.NaN, np.NaN])
b = np.array([np.NaN, np.NaN, 3])
지금은 찾을 np.mean
수익률 nan
모두 a
와 b
:
>>> np.mean(a)
nan
>>> np.mean(b)
nan
numpy 1.8 (2016 년 4 월 20 일 출시) 이후로 값 을 무시하는 nanmean을 받았습니다 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
경고없이 동작을 얻는 데 사용할 수있는 더 나은 기능이 있습니까?
경고 만 억제하지 않을 이유가 전혀 없습니다.
가장 안전한 방법은 warnings.catch_warnings
컨텍스트 관리자 를 사용하여 경고가 발생할 것으로 예상되는 곳에서만 경고를 억제하는 것입니다. 이렇게하면 RuntimeWarnings
코드의 다른 부분에서 예기치 않게 발생할 수있는 추가 사항 을 놓치지 않습니다 .
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의 솔루션도 작동하지만 궁극적으로 np.nanmean
모든 NaN 배열에서 계산을 피하기 위해 취해야하는 추가 단계 는 경고를 억제하여 피할 수있는 추가 오버 헤드를 발생시킵니다. 또한 귀하의 의도가 코드에 훨씬 더 명확하게 반영됩니다.
NaN
값 자체와 동일하지 정의된다 :
>>> float('nan') == float('nan')
False
>>> np.NaN == np.NaN
False
이 동작을 얻기 위해 Python 조건부와 nan의 속성을 절대 동일하지 않게 사용할 수 있습니다.
>>> a = np.array([np.NaN, np.NaN])
>>> b = np.array([np.NaN, np.NaN, 3])
>>> np.NaN if np.all(a!=a) else np.nanmean(a)
nan
>>> np.NaN if np.all(b!=b) else np.nanmean(b)
3.0
다음을 수행 할 수도 있습니다.
import warnings
import numpy as np
a = np.array([np.NaN, np.NaN])
b = np.array([np.NaN, np.NaN, 3])
with warnings.catch_warnings():
warnings.filterwarnings('error')
try:
x=np.nanmean(a)
except RuntimeWarning:
x=np.NaN
print x
ReferenceURL : https://stackoverflow.com/questions/29688168/mean-nanmean-and-warning-mean-of-empty-slice
반응형
'IT Share you' 카테고리의 다른 글
Android 스튜디오 : 실패 [INSTALL_FAILED_OLDER_SDK] (0) | 2021.01.08 |
---|---|
Java 및 기본 신뢰 저장소 사용 (0) | 2021.01.08 |
Kotlin에서 동시에 많은 예외를 포착하는 방법 (0) | 2021.01.08 |
IE에서 콘텐츠를 자르는 고정 너비가있는 드롭 다운 선택 (0) | 2021.01.08 |
내 applicationContext에 여러 PropertyPlaceHolderConfigurer를 가질 수 있습니까? (0) | 2021.01.07 |