Изменить тип данных netcdf4

У меня есть файл данных netCDF4, в котором переменная времени хранится как число с плавающей запятой (netCDF: 'f8', numpy: float64), и мне нужно изменить его на 32-битное целое число (netCDF: 'i4', numpy: int32). Я попытался внести изменения в python

tds.variables['time'][:] = np.int32(tds.variables['time'][:])

но это не сработало. Как лучше всего внести это изменение?


person skuzmier    schedule 14.04.2018    source источник
comment
Возможный дубликат преобразования float в byte в файле netcdf   -  person Adrian Tompkins    schedule 16.04.2018


Ответы (1)


Поскольку вы отметили вопрос nco, я предполагаю, что решение с nco также приемлемо. Это можно сделать с помощью ncap2 (пример с файлом NetCDF, который у меня лежал):

ncdump -h drycblles.default.0000000.nc`:

дает:

netcdf drycblles.default.0000000 {
dimensions: 
    z = 128 ;
    zh = 129 ;
    t = UNLIMITED ; // (37 currently)
variables:  
    double t(t) ;
        t:units = "s" ;
        t:long_name = "Time" ;
.....

Тот же дамп (измененного файла) после:

ncap2 -s 't=int(t)' drycblles.default.0000000.nc drycblles.default.0000000_2.nc

дает:

int t(t) ;
    t:long_name = "Time" ;
    t:units = "s" ;

То, что вы пытаетесь использовать в Python, не будет работать, поскольку вы преобразуете данные переменной time в int, но сохраняете их как float (вы не меняете тип переменной в файле NetCDF) . Я не вижу никаких вариантов для изменения типа данных на месте, я думаю, вы могли бы скопировать переменную time под другим именем, создать новую переменную time с типом int, скопировать данные и удалить старую переменную time.

person Bart    schedule 15.04.2018