我有一个相对较大的1-D阵列(20000个观测值)。当我计算诸如标准偏差,平均值,总和之类的解释性统计数据时,我得到了纳米值,但是当我从同一个数组计算出一个percintle时,我得到了我期望的值。我尝试过numpy.nanstd,nanmean等功能。我能做错什么?我正在使用python 2.7.9
答案 0 :(得分:7)
有三种情况np.nanstd
可能会返回 NaN :
如果输入为空
如果输入中的所有元素都是 NaN
如果其中一个元素是正无穷大或负无穷大。要理解为什么会发生这种情况,请记住标准差的公式为
由于 x 包含 inf , x 的平均值也将是 inf 。因此,在计算与均值的偏差时,至少有一个元素等于 inf - inf 。如果您在IPython提示符下尝试此操作,您将看到 inf-inf 被定义为 NaN 。
在前两种情况下,你应该收到一个有用的警告:
RuntimeWarning: Degrees of freedom <= 0 for slice.
答案 1 :(得分:0)
从 np.nanstd 输出的 inf 的另一种可能解释与 Numpy 数据类型用于存储数据有关。请参见下面的示例:
import numpy as np
a = np.array([1239., 1485., 63., 393., 37., 1186., 13., 402., 404., 915.], dtype='float16')
print(np.nanstd(a)) # returns inf
a = a.astype('float32')
print(np.nanstd(a)) # returns 519.87177