组对象上的问题xarray.apply_ufunc缺少output_dtypes

问题描述

我正尝试在daby并行化的groupby对象上使用xarray.apply_ufunc,但出现错误

数据集包含在1km²网格的特定位置上30年的每日温度数据。因此,数据形状为10950x1450x900(天,分别为Y轴和X轴)。

主要目标是对每个位置和每年的值进行排序。而且更重要的是算法必须高效存储

由于数据量巨大(〜120gb)并且无法容纳到内存中,因此我尝试使用dask进行排序,但是从我的研究中我发现,使用dask或任何其他已知的lib都没有简单的解决方案(xarray,numpy ...)(如果有的话)

dask没有实现任何排序算法,因为它对于并行化等非常复杂。

只有函数dask给我们的是topk方法,该方法从排序返回第0个元素到第N个元素。当应用于整个数据集时,内存将达到100%。

因此,现在我尝试在启用numpy.sort并行化的情况下运行dask,以查看是否可以这样做。但是我什至无法测试它,因为它会引发错误

使用的代码

xarray.apply_ufunc(numpy.sort,dataset.groupby('time.year'),kwargs={'axis': 0},dask='parallelized',output_dtypes=[numpy.float64])

错误

ValueError:使用dask ='parallelized'时,必须将输出dtypes(output_dtypes)提供给apply_func

我是在做错事还是apply_ufunc不支持groupby对象?

xarray的docs args中的

也可以是组

* args(数据集,数据数组, GroupBy ,变量,numpy.ndarraydask.array.Array或标量)–要将功能应用到的带标签和/或无标签数组的混合。 / p>

我对如何正确使用它感到困惑。

无论如何,如果您提出任何可行的方法,将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)