Я открываю вывод netcdf, созданный MITgcm, используя open_dataset. Однако одна из переменных координат в DataSet возвращается как весь DataSet, а не DataArray.Xarray - 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.T.T.T является, например, одним и тем же объектом.
В основных файлах netcdf единственная разница между измерением T и другими заключается в том, что T имеет неограниченное измерение.
T = UNLIMITED ; // (4 currently)
Однако, я создал фиктивный файл NetCDF, который имеет неограниченный размер и проблема не повторялась.
Я пробовал это с decode_times, decode_cf и decision_coords = False без разницы.
Я использую версию xarray 0.8.2, запускаю python 2.7.12.
Спасибо Стефан, я попытаюсь распространить это слово на этом – braaannigan