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

时间:2018-06-08 01:29:54

标签: python-xarray

我刚刚开始使用xarray,并且遇到了我无法在文档中找到的特定任务的问题。我创建了一个包含两个维度的数据集:

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

我想将数据变量添加到np.random.rand()的数据集中,其中模拟作为坐标,并且等于相同的维度形状例如(1000,100)。

我做的方式是:

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

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

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

因此,随机函数的形状是从尺寸中得出的。

我很感激能得到的任何帮助。

1 个答案:

答案 0 :(得分:0)

对于这种类型的构造,通常值得明确关于维度,坐标和变量的创建。我认为这可以做你想做的事。

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

听起来您真的希望在结果数组的构造函数中使用年份/模拟维度的大小。这可以这样做:

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'))