使用numpy计算忽略零的列表的标准偏差
Calculating standard deviation on list ignoring zeros using numpy
我有一个列表 pct_change
。我需要计算忽略零的列表上的标准偏差。我试过下面的代码,但它没有按预期工作。
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 个零值,然后计算标准偏差。
一种方法是将 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)
是因为我们在这里处理 floating-pt
数字,简单地与 zeros
进行比较以检测 float dtype 数组中的数字并不是一个好主意.
首先过滤不等于零的值:
>>> a
array([ 0. , 0. , 0. , 18523.94, 15501.94, 14437.03,
13402.43, 18986.14])
>>> a[a!=0].std()
2217.2329816471693
我有一个列表 pct_change
。我需要计算忽略零的列表上的标准偏差。我试过下面的代码,但它没有按预期工作。
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 个零值,然后计算标准偏差。
一种方法是将 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)
是因为我们在这里处理 floating-pt
数字,简单地与 zeros
进行比较以检测 float dtype 数组中的数字并不是一个好主意.
首先过滤不等于零的值:
>>> a
array([ 0. , 0. , 0. , 18523.94, 15501.94, 14437.03,
13402.43, 18986.14])
>>> a[a!=0].std()
2217.2329816471693