使用xarray的open_mfdataset打开的一系列大约90个netCDF文件(每个约27 MB)需要很长时间才能加载小的时空选择。
成块尺寸产生边际收益。 encode_cf =在函数内部还是单独的True都没有区别。 https://groups.google.com/forum/#!topic/xarray/11lDGSeza78的另一个建议是让我将选择内容另存为单独的netCdf并重新加载。
当笨拙的部分必须做一些工作(加载,计算,转换为熊猫数据框)时,这似乎是瓶颈。
使用dask.visualize生成图形会生成巨大的图像。可能是在告诉我们一些信息,但我不确定如何解释。
wind = xr.open_mfdataset(testCCMPPath,\
decode_cf=True,\
chunks={'time': 100,\
'latitude': 100,\
'longitude': 100})
%timeit wind.sel(latitude=latRange, longitude=windLonRange, time=windDateQueryRange).load()
wxr = wind.sel(latitude=latRange, longitude=windLonRange, time=windDateQueryRange)
df = wxr.to_dataframe()
print(df.shape)
timeit输出显示
每个循环1.93 s±29.8 ms(平均±标准偏差,共运行7次,每个循环1次)
df.shape输出仅为164x3。
对于另一个xr阵列,我也有类似的选择,并且获得的时间约为.05秒,但是这有很多稀疏点。 wind xr数组几乎没有空白。
答案 0 :(得分:0)
事实证明,文件的数量太多,无法有效地处理。
这些文件的纬度,经度和时间尺寸。在这种情况下,时间的粒度为3小时。我正在使用的时间范围使它可以处理约35000个文件。太多了,无法处理。我通过按年合并文件来解决此问题,将.nc文件的数量减少到12个。
CDO(气候数据操作员)是一种实用程序,可让我们快速合并文件。看到 [https://www.unidata.ucar.edu/software/netcdf/software.html#CDO][1]了解更多详情。
我如何使用cdo的示例:对于目录./precip/2004中的一组文件,我运行了shell命令来创建一个串联的netCDF文件2004.nc
cdo cat ./precip/2004/*.nc4 2004.nc
从那里开始,xr.open_mfdataset()的性能要好得多。