我正在从h5文件中读取数据(准确的像素值),并使用numpy在直方图中绘制数据。在我的像素值数组中,我的无数据值是99999(否则我的数据范围是-40到20)。我创建了一个基于我手动设置的最小值和最大值的直方图(分别为-40和20),因此无数据值不会显示在我的直方图中 - 这很好。但是,我想在我的数据上拟合一条正态曲线,为此我需要数据集的均值和SD。当我用numpy.mean和numpy.std生成这些时,它包含无数据值,所以我的平均值和SD值都没有了,我的后续正常曲线也是如此。
基本上,有没有办法从数组中生成均值和sd,忽略给定的值(即我的无数据值:99999),或者将数组的值输出到没有无数据的新数组值?
由于
答案 0 :(得分:3)
听起来你应该将数据存储在一个掩码数组中而不是这个带有99999无数据值的hacky方法。开始查看np.ma
。
简单示例:
>>> a = np.array([1, 2, 99999, 3])
>>> a.mean()
25001.25
>>> a_ = np.ma.masked_array(a, a == 99999)
>>> a_.mean()
2.0
>>> a_
masked_array(data = [1 2 -- 3],
mask = [False False True False],
fill_value = 999999)
答案 1 :(得分:1)
您可以先查看数据,并将有用数据保存在另一个列表(或您使用的任何其他结构)中,然后仅使用有用数据处理新列表吗?
或尝试此解决方案,How to count values in a certain range in a Numpy array?