我正在使用 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。