代码之家  ›  专栏  ›  技术社区  ›  Eric O. Lebigot

如何用numpy创建带有屏蔽值的数组的柱状图?

  •  15
  • Eric O. Lebigot  · 技术社区  · 14 年前

    在numpy 1.4.1中,计算柱状图的最简单或最有效的方法是什么? 掩蔽的 数组? numpy.histogram pyplot.hist 默认情况下,对屏蔽元素进行计数!

    我现在唯一能想到的简单解决方案是创建一个具有非屏蔽值的新数组:

    histogram(m_arr[~m_arr.mask])
    

    不过,这并不是很有效,因为这不必要地创建了一个新数组。我很乐意读到更好的想法!

    3 回复  |  直到 9 年前
        1
  •  14
  •   Joe Kington    14 年前

    (根据上述讨论取消删除此项…)

    我不确定麻木的开发人员是否会认为这是一个错误或预期的行为。我 asked on the mailing list 我想我们会看看他们说什么。

    不管怎样,这是一个简单的解决办法。修补 numpy/lib/function_base.py 使用 numpy.asanyarray 而不是 numpy.asarray 对于函数的输入,它将允许在不创建副本的情况下正确地使用屏蔽数组(或ndarray的任何其他子类)。

    编辑:这似乎是预期的行为。 As discussed here :

    如果你想忽略屏蔽数据 只需额外的函数调用

    柱状图(m_arr.compressed())

    我不认为这会导致 一份额外的副本是相关的, 因为我猜全蒙面数组 柱状图内的处理将是 更贵。

    使用asanyarray还允许 矩阵和其他子类型 可能无法正确处理 柱状图计算。

    除了掉东西以外的任何东西 不加掩饰的观察 需要弄清楚 柱状图的屏蔽数组定义 正如布鲁斯指出的那样。

        2
  •  8
  •   tillsten    14 年前

    尝试 hist(m_arr.compressed()) .

        3
  •  3
  •   Erik Hvatum    9 年前

    这是一个非常古老的问题,但现在我只使用:

    numpy.histogram(m_arr, bins=.., range=.., density=False, weights=m_arr_mask)

    其中m_arr_mask是一个与m_arr形状相同的数组,包含从柱状图中排除的m_arr元素的0个值和要包含的元素的1个值。