我有一个如下所示的数据集 ds_object
:
ds_object
<xarray.Dataset>
Dimensions: (time: 14392)
Coordinates:
* time (time) datetime64[ns] 2021-08-28T00:00:02.14...
Data variables:
variable .......
“变量”在哪里:
<xarray.DataArray 'variable' ()>
array(0., dtype=float32)
Attributes:
units: count
我正在尝试按时间扩展零维变量
。所以本质上,将“变量”从 0D 更改为 1D 数组,形状为 (1, 14392)
。 variable
将具有与“时间”相同的长度,但 variable
的奇异值重复 14392
次。
我能够做到这一点:
variable = np.full((1,len(time)),variable)
它为 variable
提供了我需要的形状,但出于某种原因,它作为坐标变量返回到 ds_object 中:
ds_object = ds_object.assign(variable_new=(variable[0]))
print(ds_object)
<xarray.Dataset>
Dimensions: (time: 13164, variable_new: 13164)
Coordinates:
* time (time) datetime64[ns] 2021-08-28T00:00:02.14...
* variable_new (variable_new) float32 0.0 0.0 ... 0.0
Data variables: (12/28)
为什么会这样?如何将 variable_new 作为新数据变量添加到 ds_object
?
最佳答案
创建一个类似于您的虚拟数据集:
In [2]: ds = xr.Dataset(
...: {'variable': ((), 0)},
...: coords={'time': pd.date_range('2021-08-28', periods=1000, freq='D')},
...: )
In [3]: ds
Out[3]:
<xarray.Dataset>
Dimensions: (time: 1000)
Coordinates:
* time (time) datetime64[ns] 2021-08-28 2021-08-29 ... 2024-05-23
Data variables:
variable int64 0
In [4]: ds['variable']
Out[4]:
<xarray.DataArray 'variable' ()>
array(0)
我们可以使用xr.DataArray.expand_dims
将数组广播到一个新的维度:
In [11]: ds['variable'] = ds['variable'].expand_dims(time=ds.time)
In [12]: ds
Out[12]:
<xarray.Dataset>
Dimensions: (time: 1000)
Coordinates:
* time (time) datetime64[ns] 2021-08-28 2021-08-29 ... 2024-05-23
Data variables:
variable (time) int64 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0 0 0
或者,您也应该能够使用 xr.Dataset.assign
完成这项任务:
In [16]: ds = ds.assign(variable=ds['variable'].expand_dims(time=ds.time))
关于python - 如何使用 xarray 沿时间维度扩展数据变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70370667/