我正在处理卫星数据,这些数据在不同时间对不同位置进行测量。我正在使用 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
可能对我的情况有帮助,但我不确定如何实现该功能...
对这个问题的任何帮助将不胜感激:)