重采样分块xarray生成多个不必要的时间块
我正在使用xarray来读取一个大型的netCDF数据集,这个数据集每6小时采样一次,我想把它降采样到每天,也就是计算每天的平均值。我已经把数据集按空间分块了。在我降采样之后,每个时间点现在都有自己的数据块。
我准备了一个简单的示例来展示这个问题。
Temp = 20 + 10 * np.random.randn(20, 10, 10) # make some temperature data
times = pd.date_range("2000-01-01", periods = 20) # daily spaced data
lon = [[i for in range(10)] for _ in range(10)]
dset = xr.Dataset({"Temp": (["time", "x", "y"], Temp)},
{"lon": (["x", "y"], lon), "lat": (["x", "y"], lon), "time": times})
dset = dset.chunk({"x": 5, "y": 5}) # Frozen({'time': (20,), 'x': (5, 5), 'y': (5, 5)})
re_dset = dset.resample(time = "5D").mean() # downsample to every 5 days
re_dset.chunks # Frozen({'time': (1, 1, 1, 1), 'x': (5, 5), 'y': (5, 5)})
降采样后数据集的块应该是 Frozen({'time': (4,), 'x': (5, 5), 'y': (5, 5)})
。
编辑过来修正了预期结果中的错误。
1 个回答
0
我觉得这里对“chunks”这个属性的理解有点误会。
你一开始有20天的数据,时间维度上只有一个切片,而在x和y维度上各有两个5的切片:
Frozen({'time': (20,), 'x': (5, 5), 'y': (5, 5)})
你把数据重新采样,每5天取一次平均值,所以你会得到4个大小为1的切片,分别对应每5天的数据,这就是你看到的结果:
Frozen({'time': (1, 1, 1, 1), 'x': (5, 5), 'y': (5, 5)})
我不太明白你为什么会期待在时间维度上只有一个大小为1的切片?至少应该是4个大小为1的切片。