使用numpy计算列表中零值之外的标准偏差

3
我有一个列表pct_change,需要计算该列表的标准差,但要忽略其中的0。我尝试了下面的代码,但它并没有按照预期工作。
import numpy as np
m = np.ma.masked_equal(pct_change, 0)
value = m.mask.std()

Input value: 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个零值,然后计算标准差。

2个回答

4

首先筛选值不等于零的内容:

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

2

一种方法是将zeros转换为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),因为我们处理的是浮点数,仅仅与进行比较以检测浮点数数据类型数组中的零值并不是一个好主意。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接