我有一个具有全球纬度和经度的大型数据集。但是,我只对查看特定区域感兴趣,所以我想过滤掉这个区域之外的所有纬度/经度。问题是我使用if语句来解析数据,但这需要太长时间。有没有更快的方法来实现这一目标?
数据来自netCDF文件,可以存储在字典中。我只想要北纬10度到北纬80度,纬度介于-170度到-50度之间。这是我到目前为止所尝试的:
ret_dict = {}
with Dataset(filename,'r') as fid:
ret_dict['time'] = fid.variables['timeObs'][:]
sort_order = np.argsort(ret_dict['time'])
lat1 = [i for i in fid.variables['latitude'][:][sort_order] if fid.variables['latitude'][:][sort_order] > 10 ]
lat2 = [i for i in lat1 if lat1 < 80]
上述代码可以针对经度重复。但是,对于我的大量数据,这太慢了。它也没有给我指数,所以我确保我保持原始纬度和经度对。如何快速截断所有变量的数据?
编辑:下面的答案对于问题的第一部分是正确的,但是我也试图使用过滤纬度的索引来截断其他变量。我在尝试:
lon = [j for i,(j,i) in zip(fid.variables['longitude'][:],fid.variables['longitude']) if 10<i<80]
但是我收到错误:*** TypeError:'numpy.float32'对象不可迭代
答案 0 :(得分:0)
您是否有任何理由需要对数据进行排序?排序是一项昂贵的操作O(nlogn)
,而过滤只是O(n)
。如果排序不是必需的,你可以通过1次过滤操作这样做。 (请记住,我不知道您的数据,因此您可能需要稍微修改一下)
lat = [i for i in fid.variables['latitude'][:] if 10 < i < 80 ]
这是我能用最少的信息给出的最快方式。如果这仍然太长,请提供更多信息,以便我们可以尝试更多地帮助您:)
EDITED