【问题标题】:Chunked calculation of mean temperatures of multiple dask/xarray datasets多个 dask/xarray 数据集的平均温度的分块计算
【发布时间】:2020-08-07 16:01:36
【问题描述】:

我有 2 个文件夹,分别包含 MIN 和 MAX 温度 netCDF 文件。

我正在尝试计算它们之间的平均温度。

最初我使用numpy.mean() 进行计算,但由于它占用了我的内存,我决定使用dask 块计算均值

import dask
import xarry


DS_MIN = xarray.open_mfdataset(MIN_TEMPS_FILES, chunks={'time': 10}, concat_dim='time', combine='by_coords').temp
DS_MAX = xarray.open_mfdataset(MAX_TEMPS_FILES, chunks={'time': 10}, concat_dim='time', combine='by_coords').temp
DS_MEAN = dask.array.from_array([DS_MIN, DS_MAX], chunks={'time': 10}).mean(axis=0)

但不幸的是,结果相同。 RAM 已被计算完全占用。

我不明白我做错了什么。

【问题讨论】:

    标签: python dask netcdf python-xarray chunks


    【解决方案1】:
    DS_MIN = xarray.open_mfdataset(MIN_TEMPS_FILES, chunks={'time': 10}, concat_dim='time', combine='by_coords').temp
    DS_MAX = xarray.open_mfdataset(MAX_TEMPS_FILES, chunks={'time': 10}, concat_dim='time', combine='by_coords').temp
    
    # I don't see a reason to call Dask on these things again, they're already dask-y
    # DS_MEAN = dask.array.from_array([DS_MIN, DS_MAX], chunks={'time': 10}).mean(axis=0)
    
    dask.compute(DS_MIN.mean(axis=0), DS_MAX.mean(axis=0))
    

    【讨论】:

    • 感谢您的澄清,但我需要计算这些 ds_min ds_max 数据集之间的平均值。它们包含相同的大小、形状、相同的坐标和相同的时间范围数据,只是温度不同。据我了解,您的建议将计算不在它们之间的每个数据集的平均值。还有一个问题,我应该坚持使用 chunks="auto" 还是手动值?
    • 也许你想把它们加在一起然后除以二?也许您想连接/堆叠数据集,然后沿某个轴计算平均值?
    • 是的,我想将它们相加并除以二
    • 如出现 da.from_array() 吃掉了整个内存。我不明白如何强制 dask 对两个数据集进行分块计算。似乎 dask 只是不断添加内存中的所有内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2020-07-02
    • 1970-01-01
    相关资源
    最近更新 更多