0

我正在使用 open_dataset 打开 MITgcm 生成的 netcdf 输出。但是,DataSet 中的坐标变量之一将作为整个 DataSet 而不是 DataArray 返回。

该过程似乎正常工作:

import xarray as xr
ds = xr.open_dataset('state.0000000000.nc')
<xarray.Dataset>
Dimensions:      (T: 8, X: 16, Xp1: 17, Y: 16, Yp1: 17, Zld000100: 100, Zmd000100: 100)

Coordinates:
  * T            (T) float64 1.296e+05 3.888e+05 6.48e+05 
  * X            (X) float64 500.0 1.5e+03 2.5e+03 
  * Y            (Y) float64 4.85e+04 4.95e+04 
  * Xp1          (Xp1) float64 0.0 1e+03 2e+03 
  * Yp1          (Yp1) float64 4.8e+04 4.9e+04 
  * Zmd000100    (Zmd000100) int64 0 1 2
  * Zld000100    (Zld000100) int64 0 1 2 
Data variables:
    iter         (T) int32 1296 3888 
    diag_levels  (Zmd000100) float64 1.0

(我省略了输出的一些细节)。但是,当我检查 T 坐标的类型时,它会以 DataSet 的形式返回

type(ds.T)
# xarray.core.dataset.Dataset

当我检查任何其他坐标/变量的类型时,它们会返回为

xarray.core.dataarray.DataArray

ds.T 坐标似乎与 ds 是同一对象。例如,如果我将一个变量添加到 ds,它也会添加到 ds.T。它似乎也是无限递归的,例如 ds.TTT 就是同一个对象。

在底层的 netcdf 文件中,T 维度与其他维度的唯一区别是 T 具有无限维度。

T = UNLIMITED ; // (4 currently)

但是,我创建了一个具有无限维度的虚拟 netcdf 文件,并且问题没有再次出现。

我已经用 decode_times、decode_cf 和 decision_coords=False 试过了,没有任何区别。

我正在使用 xarray 版本 0.8.2,运行 python 2.7.12。

4

1 回答 1

2

您需要访问变量T,如ds['T']. ds.T转置。另请参阅: 如何使用 xarray 读取名为“T”的变量?

于 2017-01-27T01:03:18.140 回答