python Xarray DataArray:如何向现有维度添加附加坐标
python Xarray DataArray: how do you add an additional coordinate to an existing dimension
我刚开始使用 Xarray DataArray
,我不确定如何向现有维度添加新的坐标轴。谁能指出我正确的方向。
所以我有一个现有数组,如下所示:
demo_results = np.zeros([10, 20, 5])
cols = ['c1', 'c2', 'c3', 'c4', 'c5']
t = xr.DataArray(demo_results, coords={'sim': cols}, dims=('run', 'year', 'sim'))
所以这将给我一个 3 维数组,沿 'sim' 维度有 5 个坐标。现在我想在名为 'c6' 的 'sim' 维度上添加一个额外的坐标,但我不确定该怎么做?我没有在文档中看到任何信息或示例。在 pandas
中,我将只引用 df.loc[:, 'c6] = 0
之类的新维度,这样就可以了。但是我用 Xarray
尝试过类似的东西,例如:
t.loc['sim', 'c6'] = 0
但是我出错了:TypeError: invalid indexer array, does not have integer dtype: array('sim', dtype='<U3')
我想我仍然掌握 DataArray 索引的窍门。
Xarray 在后台使用 numpy/dask 数组,因此不支持自动扩展(在 Pandas 中)。
如果提前知道列名和列数,就可以提前创建全区。例如
demo_results = np.zeros([10, 20, 6])
cols = ['c1', 'c2', 'c3', 'c4', 'c5', 'c6']
t = xr.DataArray(demo_results, coords={'sim': cols}, dims=('run', 'year', 'sim'))
t.loc[{'sim': 'c6'}] = -999. # or whatever value you like
请注意,当您使用不支持项目分配的 dask 数组时,这将不起作用。
如果您使用的是 dask,无法提前创建完整数组,您始终可以使用 xarray.concat
:
demo_results = np.zeros([10, 20, 1]) - 999.
cols = ['c6']
t6 = xr.DataArray(demo_results, coords={'sim': cols}, dims=('run', 'year', 'sim'))
# concat old+new
t = xr.concat([t, t6], dim='sim')
我刚开始使用 Xarray DataArray
,我不确定如何向现有维度添加新的坐标轴。谁能指出我正确的方向。
所以我有一个现有数组,如下所示:
demo_results = np.zeros([10, 20, 5])
cols = ['c1', 'c2', 'c3', 'c4', 'c5']
t = xr.DataArray(demo_results, coords={'sim': cols}, dims=('run', 'year', 'sim'))
所以这将给我一个 3 维数组,沿 'sim' 维度有 5 个坐标。现在我想在名为 'c6' 的 'sim' 维度上添加一个额外的坐标,但我不确定该怎么做?我没有在文档中看到任何信息或示例。在 pandas
中,我将只引用 df.loc[:, 'c6] = 0
之类的新维度,这样就可以了。但是我用 Xarray
尝试过类似的东西,例如:
t.loc['sim', 'c6'] = 0
但是我出错了:TypeError: invalid indexer array, does not have integer dtype: array('sim', dtype='<U3')
我想我仍然掌握 DataArray 索引的窍门。
Xarray 在后台使用 numpy/dask 数组,因此不支持自动扩展(在 Pandas 中)。
如果提前知道列名和列数,就可以提前创建全区。例如
demo_results = np.zeros([10, 20, 6])
cols = ['c1', 'c2', 'c3', 'c4', 'c5', 'c6']
t = xr.DataArray(demo_results, coords={'sim': cols}, dims=('run', 'year', 'sim'))
t.loc[{'sim': 'c6'}] = -999. # or whatever value you like
请注意,当您使用不支持项目分配的 dask 数组时,这将不起作用。
如果您使用的是 dask,无法提前创建完整数组,您始终可以使用 xarray.concat
:
demo_results = np.zeros([10, 20, 1]) - 999.
cols = ['c6']
t6 = xr.DataArray(demo_results, coords={'sim': cols}, dims=('run', 'year', 'sim'))
# concat old+new
t = xr.concat([t, t6], dim='sim')