2017-11-08 8 views
0

목록이 pct_change입니다. 난 0을 무시 목록에서 표준 편차를 계산해야합니다. 아래 코드를 시도했지만 예상대로 작동하지 않습니다.목록에서 표준 편차를 계산하여 numpy를 사용하여 0을 무시함

import numpy as np 
m = np.ma.masked_equal(pct_change, 0) 
value = m.mask.std() 

입력 값 : pct_change

0   0.00 
1   0.00 
2   0.00 
3  18523.94 
4  15501.94 
5  14437.03 
6  13402.43 
7  18986.14 

코드 3 개 0 값을 무시하고, 표준 편차를 계산한다.

답변

1

한 가지 방법은 zerosNaNs에 변환 한 후 표준 편차 계산에 대한 NaNs을 무시하는 것이라고 np.nanstd을 사용하는 것입니다 -

np.nanstd(np.where(np.isclose(a,0), np.nan, a)) 

샘플 실행 - 우리가

In [296]: a 
Out[296]: [0.0, 0.0, 0.0, 18523.94, 15501.94, 14437.03, 13402.43, 18986.14] 

In [297]: np.nanstd(np.where(np.isclose(a,0), np.nan, a)) 
Out[297]: 2217.2329816471693 

주 여기에 floating-pt 숫자를 다루고 있기 때문에 np.isclose(a,0)을 사용합니다. zeros과 비교하여 간단히 비교하는 것은 좋지 않습니다. float dtype 배열에있는 것들. 제 제로 불평등 값

2

필터 :

>>> a 
array([  0. ,  0. ,  0. , 18523.94, 15501.94, 14437.03, 
     13402.43, 18986.14]) 
>>> a[a!=0].std() 
2217.2329816471693