Python 使用numpy计算忽略零的列表上的标准偏差

Python 使用numpy计算忽略零的列表上的标准偏差,python,numpy,standard-deviation,Python,Numpy,Standard Deviation,我有一个列表pct\u更改。我需要在忽略零的情况下计算列表上的标准偏差。我尝试了下面的代码,但没有按预期工作 import numpy as np m = np.ma.masked_equal(pct_change, 0) value = m.mask.std() 输入值:pct\u更改 0 0.00 1 0.00 2 0.00 3 18523.94 4 15501.94 5 14437.03 6 1

我有一个列表
pct\u更改
。我需要在忽略零的情况下计算列表上的标准偏差。我尝试了下面的代码,但没有按预期工作

import numpy as np
m = np.ma.masked_equal(pct_change, 0)
value = m.mask.std()
输入值:
pct\u更改

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个零值,然后计算标准偏差

一种方法是将
转换为
NaNs
,然后使用
np.nanstd
,在标准偏差计算中忽略
NaNs
-

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

请注意,我们使用的是
np.isclose(a,0)
,因为我们在这里处理的是
浮点pt
数,简单地比较
零来检测浮点数据类型数组中的值不是一个好主意。

首先过滤不等于零的值:

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