将xarray的内置interp函数与dask一起使用时出错

时间:2019-08-20 11:16:45

标签: interpolation dask python-xarray

我正在尝试将xarray的interp函数与块函数一起使用,这是一个不错的数组功能。

http://xarray.pydata.org/en/stable/interpolation.html“示例”下的示例为例,我可以很好地使用interp函数。我用于执行此操作的简化代码是:

at = xr.tutorial.open_dataset('air_temperature').isel(time=0)

x = np.linspace(240, 300, 100)
z = np.linspace(20, 70, 100)
lat = xr.DataArray(z, dims=['z'], coords={'z': z})
lon = xr.DataArray((x[:, np.newaxis]-270)/np.cos(z*np.pi/180)+270,
                    dims=['x', 'z'], coords={'x': x, 'z': z})

dsi = at.interp(lon=lon, lat=lat)

当我尝试通过以下方式修改上述代码来将此interp函数与xarray块结合时,就会出现问题:

at = xr.tutorial.open_dataset('air_temperature').isel(time=0)
at = at.chunk({'lat':10})        # added chunking inducing a dask array

x = np.linspace(240, 300, 100)
z = np.linspace(20, 70, 100)
lat = xr.DataArray(z, dims=['z'], coords={'z': z})
lon = xr.DataArray((x[:, np.newaxis]-270)/np.cos(z*np.pi/180)+270,
                    dims=['x', 'z'], coords={'x': x, 'z': z})

dsi = at.interp(lon=lon, lat=lat)

代码在第

行失败
dsi = at.interp(lon=lon, lat=lat)

我得到的错误是:

ValueError:无法同时指定drop_axis和new_axis

我认为正在发生的事情是interp函数正在替换坐标,而dask无法处理此问题。这是需要在xarray中修复的错误,还是我做错了什么?

1 个答案:

答案 0 :(得分:0)

此问题现已解决。事实证明,使用过时的dask版本(0.13)会引起问题。通过更新为dask 0.24.0版本,以上错误不再发生。

有关更多说明,请参见github线程:

https://github.com/pydata/xarray/issues/3342