【问题标题】:concatenate xarray.DataArray and add new dimension连接 xarray.DataArray 并添加新维度
【发布时间】:2022-12-01 05:33:26
【问题描述】:

我有一个包含 1000 个键的字典,每个键有 23 个条目,每个条目都是一个 xarray.DataArray。 每个条目如下所示:

<xarray.DataArray 'time' (time: 23)>
array(['1861-01-16T12:00:00.000000000', '1861-02-15T00:00:00.000000000',
       '1861-03-16T12:00:00.000000000', '1861-04-16T00:00:00.000000000',
       '1861-05-16T12:00:00.000000000', '1861-06-16T00:00:00.000000000',
       '1861-07-16T12:00:00.000000000', '1861-08-16T12:00:00.000000000',
       '1861-09-16T00:00:00.000000000', '1861-10-16T12:00:00.000000000',
       '1861-11-16T00:00:00.000000000', '1861-12-16T12:00:00.000000000',
       '1862-01-16T12:00:00.000000000', '1862-02-15T00:00:00.000000000',
       '1862-03-16T12:00:00.000000000', '1862-04-16T00:00:00.000000000',
       '1862-05-16T12:00:00.000000000', '1862-06-16T00:00:00.000000000',
       '1862-07-16T12:00:00.000000000', '1862-08-16T12:00:00.000000000',
       '1862-09-16T00:00:00.000000000', '1862-10-16T12:00:00.000000000',
       '1862-11-16T00:00:00.000000000'], dtype='datetime64[ns]')
Coordinates:
  * time     (time) datetime64[ns] 1861-02-15 ... 1862-12-16T12:00:00
    month    (time) int64 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11

我正在尝试连接所有这些条目并获得一个具有维度(1000,23)的新变量

看起来像

<xarray.DataArray '条目','时间'(条目:1000,时间:23)>

然后我希望能够将其写入 Netcdf 文件以便使用 .to_netcdf。

如果我做

tt=xr.concat(entry[0],entry[1])

我得到以下信息:

<xarray.DataArray 'time' (time: 23)>
array(['1861-01-16T12:00:00.000000000', '1861-02-15T00:00:00.000000000',
       '1861-03-16T12:00:00.000000000', '1861-04-16T00:00:00.000000000',
       '1861-05-16T12:00:00.000000000', '1861-06-16T00:00:00.000000000',
       '1861-07-16T12:00:00.000000000', '1861-08-16T12:00:00.000000000',
       '1861-09-16T00:00:00.000000000', '1861-10-16T12:00:00.000000000',
       '1861-11-16T00:00:00.000000000', '1861-12-16T12:00:00.000000000',
       '1862-01-16T12:00:00.000000000', '1862-02-15T00:00:00.000000000',
       '1862-03-16T12:00:00.000000000', '1862-04-16T00:00:00.000000000',
       '1862-05-16T12:00:00.000000000', '1862-06-16T00:00:00.000000000',
       '1862-07-16T12:00:00.000000000', '1862-08-16T12:00:00.000000000',
       '1862-09-16T00:00:00.000000000', '1862-10-16T12:00:00.000000000',
       '1862-11-16T00:00:00.000000000'], dtype='datetime64[ns]')
Coordinates:
  * time     (time) datetime64[ns] 1861-01-16T12:00:00 1861-02-15 ... 1862-11-16
    month    (time) int64 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11
<xarray.DataArray 'time' (time: 23)>
array(['1861-01-16T12:00:00.000000000', '1861-02-15T00:00:00.000000000',
       '1861-03-16T12:00:00.000000000', '1861-04-16T00:00:00.000000000',
       '1861-05-16T12:00:00.000000000', '1861-06-16T00:00:00.000000000',
       '1861-07-16T12:00:00.000000000', '1861-08-16T12:00:00.000000000',
       '1861-09-16T00:00:00.000000000', '1861-10-16T12:00:00.000000000',
       '1861-11-16T00:00:00.000000000', '1861-12-16T12:00:00.000000000',
       '1862-01-16T12:00:00.000000000', '1862-02-15T00:00:00.000000000',
       '1862-03-16T12:00:00.000000000', '1862-04-16T00:00:00.000000000',
       '1862-05-16T12:00:00.000000000', '1862-06-16T00:00:00.000000000',
       '1862-07-16T12:00:00.000000000', '1862-08-16T12:00:00.000000000',
       '1862-09-16T00:00:00.000000000', '1862-10-16T12:00:00.000000000',
       '1862-11-16T00:00:00.000000000'], dtype='datetime64[ns]')
Coordinates:
  * time     (time) datetime64[ns] 1861-02-15 ... 1862-12-16T12:00:00
    month    (time) int64 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11

那么我如何遍历它并将字典的条目转换为 xarran.DataArray 的新维度并获得 (1000,23) xarray.DataArray ? 谢谢 !

【问题讨论】:

    标签: loops dictionary output netcdf python-xarray


    【解决方案1】:

    一些想法:

    ds = xr.Dataset({'Entry_0': entry[0], 
    'Entry_1': entry[1], 
    'Entry_2': entry[2]
    #... and so on
    })
    

    或者另一种做同样事情的方法是:

    # create empty xarray dataset
    ds = xr.Dataset({})
    # add data arrays to xarray dataset
    ds['Entry_0'] = entry[0]
    ds['Entry_1'] = entry[1]
    ds['Entry_2'] = entry[2]
    # add so on
    

    或者使用 for 循环以获得更简洁的代码:

    # create empty list to store xarray data arrays
    data_arrays = []
    # for loop to add data arrays to list
    for idx in range(len(entry)): 
        da = entry[idx]
        data_arrays.append(da)
    # concatenate list of data arrays along new dimension into xarray dataset
    ds = xarray.concat(data_arrays, dim='new_dim')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      • 1970-01-01
      • 2019-08-15
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多