Среднеуровневый интерфейс
Открытие файла
#
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