填充等于维度形状的 xarray 数据集变量

Fill xarray dataset variables equal to shape of dimensions

我刚开始使用 xarray,在执行我在文档中找不到的特定任务时遇到了问题。我创建了一个具有两个维度的数据集:

ds = xr.Dataset() ds['year'] = np.arange(100) ds['simulation'] = np.arange(1000)

然后我想向 np.random.rand() 的数据集添加一个数据变量,以 yearsimulation 作为坐标和等于尺寸的相同形状,例如(1000,100).

我的做法是:

ds['result'] = (('simulation','year'),np.random.rand(1000,100))

但是,必须在随机函数中指定形状似乎很奇怪,而且我确信 xarray 有一些神奇的方法可以做到这一点,但我无法弄清楚。我希望可以实现的是这样的:

ds['result'] = (('simulation','year'),np.random.rand())

因此随机函数的形状是从维度推断出来的。

如果能得到任何帮助,我将不胜感激。

对于这种类型的构造,明确说明维度、坐标和变量的创建通常是值得的。我认为这就是您想要做的。

ds = xr.Dataset()
ds['result'] = xr.DataArray(np.random.rand(1000,100),
                            dims=('simulation', 'year'),
                            coords={'simulation': np.arange(1000), 'year': np.arange(100)})

Xarray 确实允许使用一些快捷构造函数,但是当您刚开始时,坚持使用标准构造函数可能不会那么令人困惑。

编辑 1

听起来您真的想在结果数组的构造函数中使用 year/simulation 维度的大小。可以这样做:

ds = xr.Dataset()

ds.coords['year'] = xr.DataArray(np.arange(100), dims=('year',))
ds.coords['simulation'] = xr.DataArray(np.arange(1000), dims=('simulation',))

ds['result'] = xr.DataArray(np.random.rand(ds.dims['simulation'], ds.dims['year']),
                            dims=('simulation', 'year'))