导出到NetCDF文件
MATLABNetCDF功能
网络通用数据表(NetCDF)是一组软件库和独立于机器的数据格式,支持创建、访问和共享面向数组的科学数据。万博1manbetxNetCDF被广泛的工程和科学领域所使用,这些领域需要一种标准的方式来存储数据,以便共享数据。
MATLAB®高级函数可以很容易地将数据导出到netCDF文件。MATLAB底层函数提供了对NetCDF C库中的例程的访问。为了有效地使用底层函数,您应该熟悉NetCDF C接口。NetCDF文档可在Unidata网站.
请注意
有关导出到具有独立且不兼容格式的通用数据格式(Common Data Format, CDF)文件的信息,请参见导出到CDF文件.
从现有文件或模板创建新的NetCDF文件
这个例子展示了如何创建一个新的NetCDF文件,该文件包含现有文件的变量、维度和组定义,但使用不同的格式。
方法创建包含一个变量的文件nccreate
函数。
nccreate (“myfile.nc”,“myvar#”)
将数据写入文件。
A = 99;ncwrite (“myfile.nc”,“myvar#”,)
从文件中读取变量、维度和组定义ncinfo
.该信息定义了文件的模式.
S = ncinfo(“myfile.nc”);
获取文件的格式。
file_fmt = S.Format
File_fmt = 'netcdf4_classic'
的值格式
结构中的场,年代
,转换为另一种支持的Net万博1manbetxCDF格式。
S.Format =“netcdf4”;
方法创建使用新格式的文件的新版本ncwriteschema
函数。模式定义了文件的结构,但不包含原始文件中的任何数据。
ncwriteschema (“newfile.nc”,S) S = ncinfo(“newfile.nc”);
注意:当使用转换文件格式时ncwriteschema
,如果原始文件格式包含新格式不支持的字段,则可能会收到警告消息。万博1manbetx例如,netcdf4格式支持填充值,但NetCDF经典格式不支持万博1manbetx。在这些情况下,ncwriteschema
仍然创建文件,但省略了新格式中未定义的字段。
查看新文件的格式。
new_fmt = s
New_fmt = 'netcdf4'
新文件,newfile.nc
的变量和维度定义myfile.nc
,但不包含数据。
向新文件写入数据。
ncwrite (“newfile.nc”,“myvar#”,)
合并两个NetCDF文件
这个例子展示了如何使用高级函数合并两个NetCDF文件。组合文件包含被组合文件的变量和维度定义,但不包含这些原始文件中的数据。
创建NetCDF文件名为ex1.nc
并定义一个名为myvar#
.然后,将数据写入变量并显示文件内容。
nccreate (“ex1.nc”,“myvar#”);ncwrite (“ex1.nc”,“myvar#”, 55) ncdisp (“ex1.nc”)
来源:松材线虫病例1。nc格式:netcdf4_classic变量:myvar尺寸:1x1尺寸:数据类型:double
创建第二个文件并定义一个名为myvar2
.然后,将数据写入变量并显示文件内容。
nccreate (“ex2.nc”,“myvar2”);ncwrite (“ex2.nc”,“myvar2”, 99) ncdisp (“ex2.nc”)
来源:松材线虫病\ ex2。nc格式:netcdf4_classic变量:myvar2尺寸:1x1尺寸:数据类型:double
方法获取每个文件的模式ncinfo
函数。
Info1 = ncinfo(“ex1.nc”)
info1 = Filename: '松材线虫病例1。nc'名称:'/'维度:[]变量:[1x1 struct]属性:[]组:[]格式:'netcdf4_classic'
Info2 = ncinfo(“ex2.nc”)
info2 =文件名:'松材线虫病\ ex2。nc'名称:'/'维度:[]变量:[1x1 struct]属性:[]组:[]格式:'netcdf4_classic'
创建一个新的NetCDF文件,该文件使用第一个示例文件的模式ncwriteschema
函数。然后,显示文件内容。
ncwriteschema (“combined.nc”info1) ncdisp (“combined.nc”)
来源:松材线虫病\总和。nc格式:netcdf4_classic变量:myvar尺寸:1x1尺寸:数据类型:double属性:_FillValue = 9.969209968386869e+36
从添加模式ex2.nc
来combined.nc
,使用ncwriteschema
.
ncwriteschema (“combined.nc”info2)
查看合并文件的内容。
ncdisp (“combined.nc”)
来源:松材线虫病\总和。nc格式:netcdf4_classic变量:myvar尺寸:1x1尺寸:数据类型:双属性:_FillValue = 9.969209968386869e+36 myvar2尺寸:1x1尺寸:数据类型:双属性:_FillValue = 9.969209968386869e+36
该文件包含myvar#
变量在第一个示例文件中定义myvar2
变量在第二个文件中定义。
使用底层函数向NetCDF文件写入数据
这个例子展示了如何使用底层函数将数据写入NetCDF文件。MATLAB®底层函数提供了对NetCDF C库中的例程的访问。MATLAB将函数分组到一个包中,称为netcdf
.要调用包中的一个函数,必须在函数名前面加上包名。
为了有效地使用MATLAB的NetCDF函数,你应该熟悉关于NetCDF C接口的信息。
要运行此示例,您必须在当前文件夹中具有写权限。
创建一个1 × 50的数值变量my_data
在MATLAB工作空间中。这个向量是一类的双
.
My_data = linspace(0,49,50);
创建NetCDF文件名为my_file.nc
,使用netcdf.create
函数。的NOCLOBBER
参数是一个NetCDF文件访问常量,表示不希望覆盖同名的现有文件。
Ncid = netcf .create(“my_file.nc”,“NOCLOBBER”);
netcdf.create
返回文件标识符,ncid
.创建NetCDF文件时,文件以define模式打开。必须处于定义模式才能定义维度和变量。
方法在文件中定义一个维度netcdf.defDim
函数。这个函数对应于nc_def_dim
函数在NetCDF库C API中。在定义变量并将数据写入文件之前,必须在文件中定义维度。在本例中,定义一个名为my_dim
长度为50。
didim = netcdf.defDim(ncid,“my_dim”, 50)
diid = 0
netcdf.defDim
返回与新维度对应的维度标识符。标识符是从零开始的索引。
定义一个名为my_var
在维度上,使用netcdf.defVar
函数。这个函数对应于nc_def_var
函数在NetCDF库C API中。指定变量的NetCDF数据类型,在本例中,NC_BYTE
.
变量= netcdf.defVar(ncid,“my_var”,“NC_BYTE”dimid)
变量= 0
netcdf.defVar
返回对应的变量标识符my_var
.
将NetCDF文件退出定义模式。要向文件写入数据,必须处于数据模式。
netcdf.endDef (ncid)
将MATLAB工作区中的数据写入NetCDF文件中的变量,使用netcdf.putVar
函数。工作区中的数据是有等级的双
但是NetCDF文件中的变量是类型NC_BYTE
.MATLAB的NetCDF函数自动进行转换。
netcdf.putVar (ncid varid my_data)
关闭文件,使用netcdf.close
函数。
netcdf.close (ncid)
通过打开文件并将数据从变量读入MATLAB工作空间中的新变量,验证数据已写入文件。
Ncid2 = netcdf.open(“my_file.nc”,“NC_NOWRITE”);x = netcdf.getVar(ncid2,0);
的数据类型x
.
谁x
名称大小字节类属性x 50x1 50 int8
MATLAB以列为主顺序存储数据,而NetCDF C API使用行为主顺序存储数据。x
表示存储在NetCDF文件中的数据,因此是50 × 1,即使MATLAB工作区中的原始向量,my_data
,是1 × 50。因为您将数据存储在NetCDF文件中为NC_BYTE
, MATLAB将变量中的数据作为类读入工作空间int8
.
关闭文件。
netcdf.close (ncid2)