我有一个2D numpy数组,其中1.0e6为无数据值。我想生成数据的直方图,虽然我已经成功,但这不是最好的方法。
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)
似乎应该有一个干净的(为此更快的一个衬垫)。有吗?
答案 0 :(得分:9)
您可以使用布尔数组来选择所需的索引:
selected_values = (e_data > (no_data + eps)) & (e_data < (no_data - eps))
pyplot.hist(e_data[selected_values])
(e_data > (no_data + eps))
将创建一个np.bool
数组,其形状与e_data
相同,在给定索引处设置为True
当且仅当该索引处的值为大于(no_data + eps)
。 &
是满足这两个条件的元素明确的和运算符。
或者,如果no_data
只是一种惯例,我会将这些值设置为numpy.nan
,然后使用e_data[numpy.isfinite(e_data)]
。