我刚刚开始使用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())
因此,随机函数的形状是从尺寸中得出的。
我很感激能得到的任何帮助。
答案 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'))