xarray 现在支持直接通过open_mfdataset 进行多维连接。
关于沿多个维度组合数据的文档是here,但由于您的问题与this one 非常相似,我将在此处复制我的答案的关键部分:
您有一个 2D 连接问题:您需要排列数据集,以便当沿 x 和 y 连接时,它们会形成一个更大的数据集,该数据集也具有 x 和 y 维度。
只要len(x) 在每个文件中都相同,len(y) 在每个文件中都相同,理论上您应该能够以一种或两种不同的方式做到这一点。
1) 使用combine='nested'
您可以手动指定需要它们连接的顺序。xarray 允许您通过将数据集作为网格传递来执行此操作,指定为嵌套列表。在您的情况下,如果我们有 4 个文件(名为 [upper_left、upper_right、lower_left、lower_right]),我们会像这样组合它们:
from xarray import open_mfdataset
grid = [[upper_left, upper_right],
[lower_left, lower_right]]
ds = open_mfdataset(grid, concat_dim=['x', 'y'], combine='nested')
我们必须告诉open_mfdataset 网格的行和列对应于数据的哪些维度,以便它知道将数据连接在一起的维度。这就是为什么我们需要传递concat_dim=['x', 'y']。
2) 使用combine='by_coords'
但是您的数据中已经有坐标 - xarray 不能只使用这些坐标以正确的顺序排列数据集吗?这就是combine='by_coords' 选项的用途,但不幸的是,它需要一维坐标(也称为维坐标)来排列数据。如果您的文件没有这些文件,打印输出将显示Dimensions without coordinates: x, y)。
如果您可以先向文件添加一维坐标,则可以使用combine='by_coords',然后您可以按任意顺序传递所有文件的列表,即
ds = open_mfdataset([file1, file2, ...], combine='by_coords')
但否则你将不得不使用combine='nested'。