【问题标题】:Regarding xarray apply_ufunc关于 xarray apply_ufunc
【发布时间】:2018-05-25 07:04:56
【问题描述】:

我正在尝试从 3 小时的全球数据集中计算每日 Tmax。我可以使用 groupby 来做到这一点,但我想弄清楚如何通过使用 dask 并行操作(例如使用 apply_ufunc)来减少计算时间。如果有关于 ufunc 的好的文档,请告诉我(xarray 上的文档对我来说不够详细,让我有点困惑,因为我之前没有任何使用 dask 的经验)。谢谢!!

我的代码如下所示:

    TAS = xr.open_dataset(INFILE_template.format(YR, YR), chunks={'time':8})
    DAYMAX  = TAS.groupby('time.dayofyear').max(dim='time')
    DAYMAX.to_netcdf(OUTFILE_template.format(YR, YR))

TAS的维度如下:

    <xarray.Dataset>
    Dimensions:  (lat: 720, lon: 1440, time: 2928)
    Coordinates:
    * lon      (lon) float64 0.125 0.375 0.625 0.875 1.125 1.375 1.625 1.875 ...
    * lat      (lat) float64 -89.88 -89.62 -89.38 -89.12 -88.88 -88.62 -88.38 ...
    * time     (time) datetime64[ns] 2008-01-01 2008-01-01T03:00:00 ...
    Data variables:
    tas      (time, lat, lon) float32 dask.array<shape=(2928, 720, 1440),   

【问题讨论】:

    标签: dask python-xarray xarray


    【解决方案1】:

    如果您已经可以使用 groupby() 和其他 xarray 方法编写分析,那么所有这些都已与 dask 并行化。 apply_ufunc 使得包装 new 功能以支持 xarray 和 dask 变得更加容易,但是 xarray 中的所有内置例程都已经在内部使用 apply_ufunc 或类似的东西来支持 dask。

    附带说明:如果您能详细说明您在 xarray 文档中发现的令人困惑或遗漏的内容,我们一直在努力改进它们!

    【讨论】:

    • 抱歉回复慢。我的主要困惑与(i)'input_core_dims'有关,它总是计算发生的维度吗(ii)输入 xr.Dataset 是否必须是二维才能工作(如xarray.pydata.org/en/stable/dask.html 示例?)我想如果是这种情况,那么在应用 ufunc 之前,一个堆栈和 unstack lat 和 lon 到一个维度。 (iii) 这是否允许使用内置的 scipy 函数(例如,可以使用 scipy spearman 函数来应用 ufunc)。我想该页面上还有 1-2 个示例会很有帮助。
    • 顺便说一句,感谢你们提供所有已经存在的文档。这非常有帮助。上面提到的混淆可能只是因为我很久没有使用 xarray (和类似的 pkgs)。再次感谢您!
    • @Shrad 我在这个线程中有类似的问题groups.google.com/forum/#!topic/xarray/z8ue0G-BLc8
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    相关资源
    最近更新 更多