Среднеуровневый интерфейс
Открытие файла
#
NetCDF.open — Function
NetCDF.open(fil::AbstractString,v::AbstractString)
Открывает переменную NetCDF v в файле NetCDF fil и возвращает дескриптор NcVar, реализующий интерфейс AbstractArray для чтения и записи. Имейте в виду, что за закрытие файла после использования с помощью NetCDF.close отвечает пользователь.
Именованные аргументы
-
mode: режим открытия файла; по умолчаниюNC_NOWRITE; выберитеNC_WRITEдля доступа с целью записи -
readdimvar: определяет, будут ли переменные измерения считаны в структуру файла; по умолчаниюfalse
NetCDF.open(fil::AbstractString)
Открывает файл NetCDF fil и возвращает дескриптор NcFile. Имейте в виду, что за закрытие файла после использования с помощью NetCDF.close отвечает пользователь.
Именованные аргументы
-
mode: режим открытия файла; по умолчаниюNC_NOWRITE; выберитеNC_WRITEдля доступа с целью записи -
readdimvar: определяет, будут ли переменные измерения считаны в структуру файла; по умолчаниюfalse
NetCDF.open(f::Function, args...;kwargs...)
Открывает файл NetCDF, применяет функцию f к полученному файлу или дескриптору переменной и надлежащим образом закрывает файл после использования. Удобно использовать с синтаксисом блока do, например:
data = open("myfile.nc","myvar") do v NetCDF.readvar(v,start=[1,1,1], count=[-1,-1,1]) end
Получение информации
Функция NetCDF.open возвращает объект типа NcFile, который содержит метаинформацию о файле и связанных переменных. К объекту NcFile можно обращаться по индексам (nc[varname]) для получения объекта NcVar и информации о нем. С помощью вызова keys(nc) можно получить список доступных переменных.
В большинстве приведенных ниже функций среднеуровневого интерфейса в качестве первого аргумента используется объект NcFile или NcVar.
Чтение данных
#
NetCDF.readvar — Function
NetCDF.readvar(v::NcVar;start::Vector=ones(UInt,ndims(d)),count::Vector=size(d))
Считывает значения из файла, связанного с объектом NcVar v, и возвращает их. По умолчанию считывается вся переменная
Именованные аргументы
-
start: вектор длинойndim(v), задающий начальный индекс для каждого измерения -
count: вектор длинойndim(v), задающий число значений, которые должны быть считаны по каждому измерению. Особым случаем является значение --1, при котором считываются все значения по данному измерению
Пример
Допустим, что v — это переменная NetCDF с измерениями (3,3,10).
x = NetCDF.readvar(v, start=[1,2,1], count=[3,1,-1])
Это выражение считывает все значения из первого и последнего измерений, но только второе значение из второго измерения.
NetCDF.readvar{T,N}(v::NcVar{T,N},I::Union{Integer, UnitRange, Colon}...)
Считывает данные из файла NetCDF с индексированием по типу массивов. Допустимыми индексами для каждого измерения являются Integer, UnitRange и Colon.
Запись данных
#
NetCDF.putvar — Function
NetCDF.putvar(v::NcVar,vals::Array;start::Vector=ones(Int,length(size(vals))),count::Vector=[size(vals)...])
Записывает значения из массива vals в файл NetCDF. v — это дескриптор NcVar соответствующей переменной, а vals — массив с тем же измерением, что и у переменной в файле NetCDF.
Именованные аргументы
-
start: вектор длинойndim(v), задающий начальный индекс для каждого измерения -
count: вектор длинойndim(v), задающий число значений, которые должны быть считаны по каждому измерению. Особым случаем является значение --1, при котором считываются все значения по данному измерению
NetCDF.putvar(v::NcVar, val, i...)
Записывает значения val в переменную v, причем индексы указываются в том же стиле, что и для массивов.
Создание файлов
Чтобы создать файл NetCDF, сначала нужно определить измерения и переменные, которые он может содержать. Для представления измерений и переменных NetCDF существуют предварительно определенные типы NcVar и NcDim. Объект NcDim создается следующим образом:
NcDim(dimname, dimlength, atts=Dict{Any,Any}(); values=[], unlimited=false)
Здесь dimname — это имя измерения, а dimlength — его длина. Необязательный аргумент values содержит одномерный массив значений, записываемых в переменную измерения, а необязательный аргумент atts — словарь, содержащий пары имен и значений атрибутов. Если задать unlimited=true, будет создано безграничное измерение.
Определив измерения, можно создавать объекты NcVar следующим образом:
NcVar(varname , dimlist; atts=Dict{Any,Any}(), t=Float64, compress=-1)
Здесь varname — имя переменной, dimlist — массив типа NcDim, содержащий связанные с переменной измерения, а atts — словарь, содержащий пары имен и значений атрибутов. t — это тип данных, который следует использовать для хранения переменной. Можно указать либо тип Julia (Int16, Int32, Int64, Float32, Float64), который будет преобразован в нужный тип (NC_SHORT, NC_INT, NC_INT64, NC_FLOAT, NC_DOUBLE), либо сразу указать один из типов из второго списка. Можно также задать уровень сжатия переменной, присвоив аргументу compress число в диапазоне 1—9. Это влияет только на файлы NetCDF4.
Определив переменные, можно создать файл NetCDF следующим образом:
NetCDF.create(filename, varlist, gatts=Dict{Any,Any}(),mode=NC_NETCDF4)
Здесь filename — это имя создаваемого файла, а varlist — массив объектов NcVar, содержащих переменные, которые должны быть в файле. В необязательном аргументе gatts можно передать словарь с глобальными атрибутами, а mode — это тип файла, который нужно создать (NC_NETCDF4, NC_CLASSIC_MODEL или NC_64BIT_OFFSET).
Прочее
Обратите внимание, что начиная с версии 0.9 закрывать файлы NetCDF больше не нужно. Это делают финализаторы.
Чтобы просто синхронизировать изменения с диском, выполните команду
NetCDF.sync(nc)
где nc — дескриптор файла NetCDF.
В качестве альтернативы доступны методы NetCDF.open и NetCDF.create, принимающие функцию в первом аргументе.
Интерфейс для создания файлов
#
NetCDF.NcDim — Type
NcDim
Представляет измерение NetCDF с именем name; может содержать значения измерения.
#
NetCDF.NcVar — Type
NcVar
NcVar{T,N,M} представляет переменную NetCDF. Это подтип типа AbstractArray{T,N}, поэтому обычное индексирование посредством [] работает при чтении данных из файла NetCDF и записи данных в него. Объекты NcVar возвращаются при вызове NetCDF.open, при обращении к объекту NcFile по индексам (например, myfile["temperature"]) или при создании файла его конструктором. Параметр типа M означает тип данных NetCDF переменной, который может не соответствовать типу данных Julia.
#
NetCDF.create — Function
NetCDF.create(name::AbstringString,varlist::Array{NcVar};gatts::Dict=Dict{Any,Any}(),mode::UInt16=NC_NETCDF4,add_finalizer = true)
Создает файл NetCDF. Здесь name — это имя создаваемого файла, а varlist — массив объектов NcVar, содержащих переменные, которые должны быть в файле.
Именованные аргументы
-
gatts: словарь с глобальными атрибутами файла NetCDF -
mode: тип файла NetCDF (NC_NETCDF4,NC_CLASSIC_MODELилиNC_64BIT_OFFSET); по умолчаниюNC_NETCDF4
NetCDF.create(f::Function, args...;kwargs...)
Создает файл NetCDF, применяет функцию f к полученному файлу или дескриптору переменной и надлежащим образом закрывает файл после использования. Удобно использовать с синтаксисом блока do, например:
d = NcDim("time",1:10) v = NcVar("obs",d); NetCDF.create("newfile.nc",v) do nc nc["obs"][:] = rand(10) end