我正在使用xarray阅读NetCDF文件。每个变量都有4个维度( Times,lev,y,x )。阅读变量后,我计算变量 QVAPOR 的 平均值 (时间,列举< / strong>)尺寸。经过计算后,我得到变量 QVAPOR_mean 这是一个有形状的二维变量( y:699,x:639 )
Xarray只花了10微秒来读取形状数据(时间:2918,左:36,y:699,x:639 );但花了不止 60分钟 绘制形状数据的填充轮廓( y:699,x:639 )。
我想知道Xarray如何花费很长时间(超过60分钟)来绘制具有大小的数组的轮廓f( y:699,x:639 )。
我使用以下代码来读取文件并执行计算。
flnm=xr.open_mfdataset('./WRF_3D_2007_*.nc',chunks={'Times': 100})
QVAPOR_mean=flnm.QVAPOR.mean(dim=('Times','lev')
QVAPOR_mean.plot.imshow()
最后一个命令需要60多个小时才能完成。感谢帮助。 谢谢
答案 0 :(得分:1)
当您打开数据集并提供chunks
参数时,xarray将返回由dask数组组成的Dataset
。这些数组被“懒惰地”(xarray/dask documentation)评估。直到您绘制数据时才会触发计算。为了说明这一点,您可以在取平均值后显式加载数据:
flnm=xr.open_mfdataset('./WRF_3D_2007_*.nc',chunks={'Times': 100})
QVAPOR_mean=flnm.QVAPOR.mean(dim=('Times','lev').load()
现在,您的QVAPOR_mean
变量由numpy数组而不是dask数组支持。绘制此数组的速度可能会快得多。
但是,mean
的计算可能还需要很长时间。这里也有提高吞吐量的方法。
尝试使用更大的块大小。我经常发现10-100Mb范围内的块大小表现最佳。
尝试使用其他计划程序。默认情况下,您使用的是dask的线程调度程序。由于netCDF / HDF的限制,这不允许从磁盘进行并行读取。我们发现distributed
调度程序适用于这些应用程序。