我正在大型3D DataArray(天气数据:lat,lon,time)上使用xarray.interp
,以基于离散映射函数f
将值(风速)映射为新值。
插值方法似乎仅利用一个核进行计算,从而使处理效率极低。我无法弄清楚如何使xarray
使用多个内核来完成此任务。
我确实通过htop
和dask
的{{1}}仪表板监视了计算。
xarray.interp
仅显示一个正在使用的核心,仪表板未显示任何工人中的任何活动。我可以观察到的唯一htop
活动是从磁盘加载dask
数据文件。如果我使用netcdf
预加载数据,则此.load()
活动已消失。
我还尝试将dask
函数与scipy.interpolate.interp1d
结合使用以达到我想要的等效结果,但是没有观察到任何并行使用率(xarray.apply_ufunc()
)或活动({{1 }}仪表板)。
对我而言,目前最快的方法是使用htop
,然后使用原始DataArray的坐标将其重铸回dask
。但这还没有并行化,只能快百分之几。
在下面的 MWE 中,在框4的numpy.interp
语句之后,我看不到任何xr.DataArray
活动。
编辑:
使用(例如)进行评估时,必须在单独的代码块1-4中运行代码。 dask
。由于da.load()
导致多核活动,并且是显式地发生(方框2)或隐式地发生(由4触发),因此,如果由数据加载引起的多核活动被htop
错误地归因于您可以整体运行脚本。
load()
.interp()
# 1: For the dask dashboard
from dask.distributed import Client
client = Client()
display(client)
import xarray as xr
import numpy as np
da = xr.tutorial.open_dataset("air_temperature", chunks={})['air']
# 2: Preload data into memory
da.load()