在NumPy的掩码数组中获取非掩码值

4
我将尝试从netCDF4文件中提取数据。这些文件包含了Numpy库的“MaskedArrays”。
我的数据包括:纬度,经度,日期和值(分散在不同的文件中)。此外还有一个掩码,显示哪些纬度/经度由于各种原因无效(没有测量或其他原因)。
我的数据看起来像这样(对于蒙版数据):
masked_array(
    data =
     [[[-- -- -- ..., -- -- --]
        ..., 
       [-- -- -- ..., -- -- --]]],
    mask =
     [[[ True  True  True ...,  True  True  True]
        ...,
       [ True  True  True ...,  True  True  True]]],
    fill_value = 32767)

我正在寻找一个numpy方法(或类似方法),可以提取未遮罩的值。最好的方法是通过剪切数据集中所有非有效条目来实现。我发现.compressed,但它返回一个一维数组。对于第三个维度来说,这是相当丢失信息的,因为我不知道这些值在哪里。
此外,我尝试了nonzero = the_array['one of the values'][0].nonzero()。这给了我一个带有纬度/经度值的双重数组,但之后我仍然需要访问它们,这很慢。不幸的是,在知道如何访问所有这些日期之后,我需要在30*6个文件上执行此操作,每个文件都有大约1500×700×365个数据点:D。
all_days = [(x, rhstmax['stuff'][x][24][1288]) for x in range(366)]
# represents just for lat:24,lon:1288 all days. First 20:
all_days[:20] =
    [(0, 15.799999),
     (1, 16.199999),
     (2, 17.4),
     (3, 13.2),
     (4, 10.8),
     (5, 11.3),
     (6, 15.299999),
     (7, 16.299999),
     (8, 14.099999),
     (9, 10.8),
     (10, 9.5),
     (11, 9.0999994),
     (12, 11.9),
     (13, 9.1999998),
     (14, 31.0),
     (15, 49.0),
     (16, 8.6999998),
     (17, 10.0),
     (18, 44.099998),
     (19, 30.699999)]
# ... takes forever :(

1
在剔除所有非有效条目后,您的输出结构理想上应该是什么样子?您是否查看了有关仅访问有效条目的概述? - Brad Solomon
压缩后返回1d,因为每行或每列的数字值不一致。填充是“删除”掩码值的另一种方法。 - hpaulj
2个回答

5
为了在Python中获取未掩码的数据,您可以使用.mask工具。
假设您有以下数据集:
data = [[0.0 1.0 -- --]
       [2.0 3.0 -- --]]

您可以通过使用 data.mask 命令获取所有索引为 False 的非蒙版数据。
data = data[data.mask == False]

请注意,这将为您提供所有输入的一维数组。
data -> [0.0 1.0 2.0 3.0]

3

如果您想删除任何/所有掩码数据的行:

data = data[~data.mask.any(axis=1)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接