1

我正在从 h5 文件中读取数据(准确地说是像素值),并使用 numpy 在直方图中绘制数据。在我的像素值数组中,我的无数据值为 99999(否则我的数据范围为 -40 到 20)。我根据手动设置的最小值和最大值(分别为 -40 和 20)创建直方图,因此无数据值不会显示在我的直方图中 - 这很好。但是,我想在我的数据上拟合一条正态曲线,为此我需要数据集的平均值和 SD。当我使用 numpy.mean 和 numpy.std 生成这些时,它包含无数据值,因此我的均值和 SD 值相差甚远,我随后的正常曲线也是如此。

本质上,有没有办法从数组生成平均值和标准差,忽略给定值(即我的无数据值:99999),或者将我的数组的值输出到没有无数据值的新数组?

谢谢

4

2 回答 2

4

听起来您应该将数据存储在一个掩码数组中,而不是这种具有 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)
于 2014-02-17T16:51:27.430 回答
1

您可以先浏览数据,然后将有用数据保存在另一个列表(或您使用的任何其他结构)中,然后仅使用有用数据处理新列表吗?

或者试试这个解决方案,如何计算 Numpy 数组中某个范围内的值?

于 2014-02-17T16:48:29.197 回答