簡體   English   中英

如何使用 xarray 沿時間維度擴展數據變量?

[英]How do I expand a data variable along a time dimension using xarray?

我有一個看起來像這樣的 DataSet 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

我正在嘗試按時間擴展零維variable 因此,本質上,將“變量”從 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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM