Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Xarray绘制二维数据需要惊人的长时间?_Python_Netcdf_Dask_Python Xarray_Xarray - Fatal编程技术网

Python 使用Xarray绘制二维数据需要惊人的长时间?

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分钟)来绘制具有大小的阵列

我正在使用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

我使用以下代码读取文件并执行计算

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)绘制数据的时间不应超过几秒钟。我想知道发生了什么事?