Python 获取Numpys掩码数组中的非掩码值
我正在尝试从netCDF4文件中提取数据。这些包含“面具光线”,它们是Numpy库的一部分 我的数据包含:纬度、经度、日期和值(在不同的文件中分开)。 另外,一个显示由于各种原因(无测量或其他原因)哪些纬度/经度无效的遮罩 我的数据如下所示(对于屏蔽数据): 我正在搜索一个numpy方法(或类似方法),它只能提取这些未被屏蔽的值。理想情况下,只需从数据集中删除所有无效条目。 我找到了Python 获取Numpys掩码数组中的非掩码值,python,performance,numpy,data-science,masked-array,Python,Performance,Numpy,Data Science,Masked Array,我正在尝试从netCDF4文件中提取数据。这些包含“面具光线”,它们是Numpy库的一部分 我的数据包含:纬度、经度、日期和值(在不同的文件中分开)。 另外,一个显示由于各种原因(无测量或其他原因)哪些纬度/经度无效的遮罩 我的数据如下所示(对于屏蔽数据): 我正在搜索一个numpy方法(或类似方法),它只能提取这些未被屏蔽的值。理想情况下,只需从数据集中删除所有无效条目。 我找到了.compressed,但它返回了一维数组。从第三维度来看,这是一个相当大的信息损失,我不知道这些值在哪里 此外,
.compressed
,但它返回了一维数组。从第三维度来看,这是一个相当大的信息损失,我不知道这些值在哪里
此外,我还尝试了nonzero=_数组['one of the values'][0].nonzero()
。
这给了我一个具有lat/lon值的双数组,但在这之后,我仍然必须访问这些值,这很慢。不幸的是,在知道如何访问所有这些日期后,我需要在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 :(
要获取Python中的非屏蔽数据,可以使用
.mask
工具
假设您拥有以下数据集:
data = [[0.0 1.0 -- --]
[2.0 3.0 -- --]]
通过data.mask
命令,您可以在获取所有False
索引的同时获取非屏蔽数据
data = data[data.mask == False]
注意,这将为您提供所有输入的1D数组
data -> [0.0 1.0 2.0 3.0]
如果要删除包含任何/所有屏蔽数据的行:
masked_array(
data =
[[[-- -- -- ..., -- -- --]
...,
[-- -- -- ..., -- -- --]]],
mask =
[[[ True True True ..., True True True]
...,
[ True True True ..., True True True]]],
fill_value = 32767)
data = data[~data.mask.any(axis=1)]
理想情况下,在删除所有无效条目后,输出的结构是什么?您是否在上检查了此概述?compressed返回1d,因为每行或每列的数值不一致。填充是“删除”屏蔽值的另一种方式。