NetCDF 全称为 Network Common Data Format,中文为“网络通用数据格式”,它是由美国大学大气研究协会的Unidata项目科学家针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据描述和编码标准,有关详细信息可查看NetCDF 的官方网站。
NetCDF 和 zip、jpeg、bmp 文件格式类似,都是一种文件格式的标准。起初NetCDF文件目的是用于存储气象科学中的数据,现在已经成为许多数据采集软件生成文件的格式。利用NetCDF可以对网络数据进行高效地存储、管理、获取和分发等操作。由于其灵活性,能够传输海量的面向阵列(array- oriented)数据,目前广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。
从数学上来说,NetCDF 存储的数据就是一个多自变量的单值函数。用公式来说就是f(x,y,z,…)=value,函数的自变量x,y,z等在NetCDF 中叫做维(Dimension)或坐标轴(Axis),函数值value在 NetCDF中叫做变量(Variables)。而自变量和函数值在物理学上的一些性质,比如计量单位(量纲)、物理学名称等等在 NetCDF 中就叫属性(Attributes)。
基本词汇
NetCDF 文件包含维度、变量和属性。将这几部分结合起来使用可以说明数据以及面向数组的数据集中各数据字段之间关系的含义。
NetCDF name{
Dimensions:… //定义维数
Variables:… //定义变量
Attributes:… //属性
Data:…//数据
}
- 维度(Dimensions)
一个维对应着函数中的某个自变量,或者说函数图象中的一个坐标轴,在线性代数中就是一个N维向量的一个分量(这也是维这个名称的由来)。在netcdf中,一个维具有一个名字和范围(或者说长度,也就是数学上所说的定义域,可以是离散的点集合或者连续的区间)。维度大小是一个任意的正整数。每个 NetCDF 文件中只有一个维度的大小是“无限制”的。这类维度是无限维度或记录维度。无限维度的变量可以沿着该维度增加到任意长度。
- 变量(Variables)
变量对应着真实的物理数据。可以用变量表示电表中每个时刻显示的度数,即用户此刻的耗电量,是以时间为自变量(或者说自变量个数为一维)的单值函数。也可用于在气象学中表示气压图,就是“东经xx度,北纬yy度的点的大气压值为多少帕”,这是一个二维单值函数,两维分别是经度和纬度,函数值为大气压,此时的气压值就是变量值。
- 属性(Attributes)
属性是对变量值和维的具体物理含义的注释或解释,能够帮助人们更好的明白变量和维的具体含义。
在 NetCDF 中,属性由一个属性名和一个属性值(一般为字符串)组成。例如在某个文件中有这样的代码段:
temperature:units = "celsius" ;
前面的 temperature 是一个已经定义好的变量(Variable),即温度,冒号后面的 units 就是属性名,表示物理单位,= 后面的就是units这个属性的值,为“celsius” ,即摄氏度,整个一行代码的意思就是温度这个物理量的单位为celsius,很好理解。有些属性提供有关整个 NetCDF 文件的信息,因而称为全局属性。这些属性由属性名称与空变量名(CDL 中)或特殊空变量 ID(C 或 Fortran 中)共同标识。
- 数据(Data)
NetCDF 支持的数据类型是char,byte,short,int,float或者double。
示例
netcdf simple_xy {
dimensions:
x = 6 ;
y = 12 ;
variables:
int data(x, y) ;
data:
data =
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71 ;
}
示例中包括有三个部分
1、维:以“dimensions”关键字开头:
dimensions:
x = 6 ;
y = 12 ;
定义了两维,即x轴和y轴,x轴长度为6, y轴长度为12。
2、变量:以“variables”开头:
variables:
int data(x, y);
定义了一个以x轴和y轴为自变量的函数data,数学公式就是f(x,y)=data, 注意维出现的顺序是有序的,它决定data段中的具体赋予的值的顺序。
3、数据,以“data”开头:
data:
data =
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71 ;
用数学的函数公式f(x,y)=data来看,即当 x=0,y=0时,data = 0;x=0,y=1时,data = 1; x=5,y=11时,data=71;