Почему данные NETcdf, которые я создал, маскируются? - PullRequest
0 голосов
/ 10 октября 2018

Я создаю файл netcdf с некоторыми данными, и когда я импортирую данные в другой скрипт, он маскируется:

    >>> type(Data[:])
    <class 'numpy.ma.core.MaskedArray'>

Вот как я создаю данные:

    # Put in a grid
    print 'Putting the data in a grid...'
    LatRange = range( int(min(Lat)), int(max(Lat)), 1 )
    LonRange = np.arange( int(min(Lon)), int(max(Lon)), 1 )
    dRange = range(0,200,10) + range(200,4000,100)
    dateRange = np.arange( float(min(Dates).year)+min(Dates).month/12., float(max(Dates).year)+max(Dates).month/12., 1./12. )

    dataset = Dataset('gridded_data/DataAveraged.nc','w', format='NETCDF4_CLASSIC')
    zD = dataset.createDimension('zD',len(dRange))
    latD = dataset.createDimension('latD',len(LatRange))
    lonD = dataset.createDimension('lonD',len(LonRange))
    timeD = dataset.createDimension('timeD',len(dateRange))

    tempAve = dataset.createVariable('tempAve', np.float32, ('zD','latD','lonD','timeD'), fill_value=-9999)
    tempAve.units = 'psu'
    tempAve[:] = Tgrid_ave

Где Tgrid_ave - это пустой массив.

Затем я импортирую данные таким образом в другой скрипт:

    dataset = Dataset('gridded_data/DataAveraged.nc', 'r')

    LatRange = dataset.variables['lat'][:]
    LonRange = dataset.variables['lon'][:-1]

    Tgrid_ave = dataset.variables['tempAve']

И мои данные Lat и Lon не маскируются, а мои данные Tgrid_aveis.

Как мне избежать этого??

1 Ответ

0 голосов
/ 11 октября 2018

Библиотека netCDF4, используемая для возврата либо маскированного массива, либо обычного массива Numpy, в зависимости от того, содержат ли данные, которые вы запрашиваете из массива (или среза массива), значения заполнения или нет.Это неудачное поведение, но, похоже, оно исправлено в PR 787 .Так что я думаю, что начиная с версии 1.4 и далее поведение по умолчанию всегда возвращает маскированный массив, если определено значение заполнения (я не проверял его).

В любом случае, вы можете убедиться, что вы всегда получаете обычный массив numpy, установив set_auto_mask в False.

...