2017-01-26 14 views
0

Я открываю вывод 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.

ответ

1

Вам необходимо получить доступ к переменной T, например ds['T']. ds.T выполняет транспонирование. См. Также: How to read a variable called "T" with xarray?

+0

Спасибо Стефан, я попытаюсь распространить это слово на этом – braaannigan