Python 使用Xarray绘制二维数据需要惊人的长时间?
我正在使用xarray读取NetCDF文件。每个变量有4个维度(时间、水平、y、x)。读取变量后,我沿着(时间,lev)维度计算变量的平均值。经过计算,我得到变量QVAPOR\u mean,它是一个具有形状的二维变量(y:699,x:639) Xarray只用了10微秒就读取了带有形状的数据(次:2918,lev:36,y:699,x:639);但是花了超过 60分钟绘制形状数据的填充轮廓(y:699,x:639) 我想知道为什么Xarray要花费非常长的时间(超过60分钟)来绘制具有大小的阵列轮廓线(y:699,x:639) 我使用以下代码读取文件并执行计算Python 使用Xarray绘制二维数据需要惊人的长时间?,python,netcdf,dask,python-xarray,xarray,Python,Netcdf,Dask,Python Xarray,Xarray,我正在使用xarray读取NetCDF文件。每个变量有4个维度(时间、水平、y、x)。读取变量后,我沿着(时间,lev)维度计算变量的平均值。经过计算,我得到变量QVAPOR\u mean,它是一个具有形状的二维变量(y:699,x:639) Xarray只用了10微秒就读取了带有形状的数据(次:2918,lev:36,y:699,x:639);但是花了超过 60分钟绘制形状数据的填充轮廓(y:699,x:639) 我想知道为什么Xarray要花费非常长的时间(超过60分钟)来绘制具有大小的阵列
flnm=xr.open_mfdataset('./WRF_3D_2007_*.nc',chunks={'Times': 100})
QVAPOR_mean=flnm.QVAPOR.mean(dim=('Times','lev')
QVAPOR_mean.plot.imshow()
最后一个命令需要60多分钟才能完成。谢谢你的帮助。
谢谢当您打开数据集并提供
chunks
参数时,xarray将返回一个由dask数组组成的数据集。这些数组是“惰性地”(lazy)计算的。直到绘制数据后,才会触发计算。为了说明这一点,您可以在取平均值后显式加载数据:
flnm=xr.open_mfdataset('./WRF_3D_2007_*.nc',chunks={'Times': 100})
QVAPOR_mean=flnm.QVAPOR.mean(dim=('Times','lev').load()
现在您的QVAPOR\u mean
变量由numpy数组而不是dask数组支持。绘制此阵列可能要快得多
但是,计算平均值
可能仍需要相当长的时间。这里也有提高吞吐量的方法
- 尝试使用较大的块大小。我经常发现10-100Mb范围内的块大小表现最好
- 尝试其他计划程序。默认情况下,您使用的是dask的线程调度程序。由于netCDF/HDF的限制,这不允许从磁盘进行并行读取。我们发现
分布式
调度器在这些应用程序中运行良好
以GB为单位的总数据集有多大<代码>2918*36*699*639*8/2**30=350GB
?您可以使用块大小,但我不确定您可以期望有多大的改进。是的,大约为350GB。我已经在时间维度上丢弃了数据。计算速度很快,唯一的问题是绘图。Python用shape(y:699,x:639)绘制数据的时间不应超过几秒钟。我想知道发生了什么事?