合并 Xarray 数据集太慢

问题描述 投票:0回答:0

我正在处理卫星数据,这些数据在不同时间对不同位置进行测量。我正在使用 xarray 数据集形式的 netcdf 数据。我想要一个随着时间的推移测量的“联合”,这样我就可以获得给定时间窗口的整个空间覆盖范围。我知道

xarray.merge
在这里可以提供帮助。但是,
compat
参数的任何值似乎都对我的情况没有帮助。不同时间的测量值可能存在一些空间重叠,我想要最新的值。如果我在这里误解了什么,请赐教。

我尝试这样做的方式是使用

xarray.Dataset.combine_first
,其中数据集可以与联合合并,保留第一个数据集的值。我对我拥有的所有时间步递归地执行此操作。我的功能是:

def combine_in_time(ds,
                    start:str,
                    end:str,
                    varname:str) -> xr.DataArray:
    """returns DataArray with values combined in time
    """
    ds = ds.sortby('time')
    ds_list = [ds[varname].sel(time=time) for time in ds.time.sel(time=slice(start,end))]

    ds.time.sel(time=slice(start,end))

    def combine(ds_list):
        
        if len(ds_list) == 0:
            pass
        elif len(ds_list) == 1:
            return ds_list[0]
        else:
            ds_list[0] = ds_list[0].combine_first(ds_list[1])
            ds_list.pop(1)
            return combine(ds_list)

    return combine(ds_list)

现在这个工作非常缓慢。我的猜测是它必须多次组合数据集,即每次一次用于附加时间坐标。可以做些什么来加快速度?有没有办法将所有时间坐标的数据合并在一起?似乎

xarray.reduce
可能对我的情况有帮助,但我不确定如何实现该功能...

对这个问题的任何帮助将不胜感激:)

python netcdf python-xarray array-merge
© www.soinside.com 2019 - 2024. All rights reserved.