【问题标题】:matplotlib hist while ignoring a particular no data valuematplotlib hist,同时忽略特定的无数据值
【发布时间】:2011-11-07 16:17:40
【问题描述】:

我有一个 1.0e6 作为无数据值的 2D numpy 数组。我想生成数据的直方图,虽然我已经成功了,但这并不是最好的方法。

from matplotlib import pyplot
import sys

eps = sys.float_info.epsilon
no_data = 1.0e6

e_data = elevation.reshape(elevation.size)
e_data_clean = [ ]

for i in xrange(len(e_data)):
    val = e_data[i]
    # floating point equality check for val aprox not equal no_data
    if val > no_data + eps and val < no_data - eps:
        e_data_clean.append(val)

pyplot.hist(e_data_clean, bins=100)

似乎应该有一个干净的(并且为此更快的一个班轮)。有吗?

【问题讨论】:

    标签: python numpy matplotlib


    【解决方案1】:

    您可以使用布尔数组来选择所需的索引:

    selected_values = (e_data > (no_data + eps)) & (e_data < (no_data - eps))
    pyplot.hist(e_data[selected_values])
    

    (e_data &gt; (no_data + eps)) 将创建一个具有与e_data 相同形状的np.bool 数组,并在给定索引处设置为True,当且仅当该索引处的值大于(no_data + eps)&amp; 是满足这两个条件的逐元素 and 运算符。

    或者,如果no_data 只是一个约定,我会将这些值设置为numpy.nan,并使用e_data[numpy.isfinite(e_data)]

    【讨论】:

      猜你喜欢
      • 2014-09-08
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 2011-01-23
      • 2018-11-12
      • 1970-01-01
      相关资源
      最近更新 更多