什么可能导致numpy.nanstd()返回nan?

时间:2015-03-10 00:53:13

标签: python arrays numpy

我有一个相对较大的1-D阵列(20000个观测值)。当我计算诸如标准偏差,平均值,总和之类的解释性统计数据时,我得到了纳米值,但是当我从同一个数组计算出一个percintle时,我得到了我期望的值。我尝试过numpy.nanstd,nanmean等功能。我能做错什么?我正在使用python 2.7.9

2 个答案:

答案 0 :(得分:7)

有三种情况np.nanstd可能会返回 NaN

  1. 如果输入为空

  2. 如果输入中的所有元素都是 NaN

  3. 如果其中一个元素是正无穷大或负无穷大。要理解为什么会发生这种情况,请记住标准差的公式为

    enter image description here

    由于 x 包含 inf x 的平均值也将是 inf 。因此,在计算与均值的偏差时,至少有一个元素等于 inf - inf 。如果您在IPython提示符下尝试此操作,您将看到 inf-inf 被定义为 NaN

  4. 在前两种情况下,你应该收到一个有用的警告:

    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