【问题标题】:Ignore/skip a value in a numpy array?忽略/跳过 numpy 数组中的值?
【发布时间】:2014-02-17 16:33:41
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: python arrays numpy h5py


    【解决方案1】:

    听起来您应该将数据存储在掩码数组中,而不是这种 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)
    

    【讨论】:

      【解决方案2】:

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

      或者试试这个解决方案,How to count values in a certain range in a Numpy array?

      【讨论】:

      • 谢谢,这看起来可行,但我使用 a = [x for x in a if x != 99999] 管理它
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      相关资源
      最近更新 更多