如何快速过滤大型数据集?

时间:2016-06-15 15:13:03

标签: python numpy

我有一个具有全球纬度和经度的大型数据集。但是,我只对查看特定区域感兴趣,所以我想过滤掉这个区域之外的所有纬度/经度。问题是我使用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'对象不可迭代

1 个答案:

答案 0 :(得分:0)

您是否有任何理由需要对数据进行排序?排序是一项昂贵的操作O(nlogn),而过滤只是O(n)。如果排序不是必需的,你可以通过1次过滤操作这样做。 (请记住,我不知道您的数据,因此您可能需要稍微修改一下)

lat = [i for i in fid.variables['latitude'][:] if 10 < i < 80 ]

这是我能用最少的信息给出的最快方式。如果这仍然太长,请提供更多信息,以便我们可以尝试更多地帮助您:)

EDITED