**网络通用数据格式**（英語：，**netCDF**）是一种自描述、与机器无关、基于阵列的科学数据格式，同时也是支持创建、访问和共享这一数据格式的函式库。该项目主页位于美国大气科学研究大学联盟（UCAR）的Unidata规划网站。它也是netCDF软件、标准开发、更新等的主要来源。netCDF格式是一种开放标准。

netCDF项目开始于1989年，UCAR目前对其积极支持，在新发行版中改进性能、增加功能并修正缺陷，当前版本系列是netCDF-4。netCDF的经典格式（CDF-1）和64位偏移量格式（CDF-2），是开放地理空间协会采用的国际标准。

历史
--

1985年美国国家航空航天局（NASA）的国家空间科学数据中心（NSSDC），设计并开发了通用数据格式（CDF），CDF最初是用FORTRAN写成，并只能在VAX/VMS环境下获得。Unidata在1987年8月成立了关于CDF的工作组，提议探索与NASA协作，扩展CDF的FORTRAN接口，定义C接口，并允许用一个单一调用访问数据聚集，同时要维持与现存NASA接口兼容的可能性。在1988年早些时候，Unidata的Glenn Davis用C开发了原型netCDF包，它位于网络表示层XDR格式的上层，而结果的程序可以在UNIX和VMS系统二者上实现。NASA的CDF和Unidata的netCDF从此独立发展，但新近的CDF版本与netCDF共享了很多特征。

1991年Unidata发布了netCDF版本2.0，1997年发布了版本3.3。2003年7月美国能源部的阿贡国家实验室和西北大学，贡献了叫做并行netCDF（或称PnetCDF）的一个netCDF并行计算扩展。2004年在NASA的资助下，Unidata与美国国家超级计算应用中心（NCSA），开始合作增进netCDF和HDF5的互操作性。2008年Unidata发布了版本4.0，允许使用HDF5数据文件格式。同时发布了版本3.6.3，它与版本4.0是同样的代码但关掉了netcdf-4特征，目前netCDF-3库仍然在世界各地被广泛使用。2010年Unidata发布了版本4.1.1，增加了对C和Fortran客户端通过OPeNDAP（英语：）访问远程数据的特定子集的支持，并使用PnetCDF扩展库，支持在netCDF经典格式（CDF-1、CDF-2和CDF-5）上的并行I/O。

格式描述
----

netCDF库支持多种不同的二进制格式的netCDF文件：

* CDF-1，在最初netCDF发行中使用的经典格式，它仍是文件建立的缺省格式。
* CDF-2，在版本3.6.0中介入的64-bit偏移量格式，它支持更大的变量和文件大小。
* netCDF-4/HDF5，在版本4.0中介入的格式，它是带有一些限制的HDF5数据格式。
* HDF4 SD，在版本4.1中开始支持对这个格式的只读访问。
* CDF-5，由PnetCDF扩展库在CDF-2基础之上规定的格式，集成入了netCDF库版本4.4.0中。

所有格式都是"自描述的"。 这意味其中有一个头部，它描述文件余下部分的格局，特别是阵列数据，连同以名称/值特性形式的任意文件元数据。这个格式是跨平台的，涉及的问题如字节序在软件库中解决。数据以允许有效的构造子集的方式来存储。

起始于版本4.0，netCDF API允许使用HDF5数据格式。netCDF用户可以建立HDF5文件从而获得netCDF格式不具备的利益，比如更大的文件和多重无限制的维度。

完全后向兼容，可访问旧有netCDF文件并支持以前版本的C和Fortran API。

软件
--

netCDF常用于气候学、气象学和海洋学应用，如天气预报、气候变化；也用于地理信息系统应用，是很多GIS应用的输入/输出格式；并用于通用科学数据交换。从它的站点引述如下：netCDF（网络公用数据格式）是用于面向阵列数据访问的一组接口，和针对C、Fortran、C++、Java和其他语言的一套自由发行的数据访问库。netCDF库支持用来表示科学数据的一种机器无关格式。接口、库和格式一起支持建立、访问和共享科学数据。

### 访问库

UCAR发布的软件库提供了对netCDF文件的读写访问，编码和解码所需的阵列和元数据。核心库是用C编写的，并为C或C++应用提供API，为Fortran应用提供了两个API，一个给Fortran 77，一个给Fortran 90。Unidata还开发维护一个独立实现，使用100% Java写成，它扩展了核心数据模型并增加了额外的功能。其他编程语言基于netCDF的C库也能获得至其API的接口，这包括R、Perl数据语言（英语：）、Python、Ruby、Haskell、Mathematica、MATLAB、IDL和Octave。API调用规定在不同语言间非常类似，当然会有着不可避免的不同语法。不同版本的API调用是后向兼容的。应用编程者使用支持这个库的语言，在正常情况下不需要关心文件结构自身，即使它作为开放格式是可以获知的。

* Python语言通过模块访问netCDF文件，可以用Unidata官方发行的`netCDF4-python`，此外，读写netCDF-4格式可用h5netcdf；读写其他netCDF格式可用SciPy。`xarray`模块可将netCDF导入导出于pandas的`DataFrame`对象；cfgrib是ECMWF发行的使用ecCodes并遵从CF（英语：）约定，将GRIB映射到NetCDF通用数据模型的接口。NCAR的PyNIO模块支持多种netCDF格式，它的开发已经停止而进入维护状态。
* R语言通过包来支持netCDF，包括还支持HDF5的ncdf4，和不支持HDF5的RNetCDF。

### 应用

现在已经出产了范围广泛的使用netCDF文件的应用程序。它们的范围从命令行实用程序到图形可视化包。下面列出其中一小部分，而更长的列表可见于UCAR网站列表：

* netCDF算子（NCO），这个套件是针对netCDF文件的常用Unix命令行实用工具集，它提供一套命令来操纵和分析netCDF文件，包括基本记录串接、数组分片（英语：）和平均。
* ncview，它是netCDF格式文件的可视浏览器。这个程序是可视化在netCDF文件中的场的简单、快速、基于GUI的工具。
* NCAR命令语言（NCL），它可用来分析和可视化netCDF中的数据（还支持其他格式）。
* 网格分析和显示系统（GrADS），它是交互式桌面工具，用来容易的访问、操纵和可视化地球科学数据。
* 地理数据抽象库（GDAL），它提供对netCDF数据的读写访问支持。
* Panoply，它是netCDF文件查看器，它关注地理网格数据的表示。它是用Java写成因而跨平台。
* ECMWF的Metview，这个工作站和批处理系统可以处理netCDF和GRIB及BUFR。
* Ferret，它是交互式计算机可视化和分析环境，设计用来满足海洋学者和气象学者分析巨大而且复杂的网格数据。
* HDFql，它使用户能在C、C++、Java、Python、C#、Fortran和R语言中通过高层语言（类似SQL）来管理netCDF-4/HDF5文件。

元数据约定
-----

条目：气候和预报元数据约定（英语：）
气候和预报（CF）约定是对地球科学数据的元数据约定，意图用于促进处理和共享通过netCDF应用编程接口（API）建立的文件。CF约定于2003年建立，普遍化并扩展了早期的协作海洋/大气研究数据服务（COARDS）约定和对气候数据的Gregory/Drach/Tett（GDT）约定。CF约定定义了与数据包含在同一个文件中的元数据，从而使得文件"自我描述"，提供对在每个变量中的数据表示的是什么的确切描述，和数据的空间的和时间的属性的确切描述，包括关于网格的信息，比如网格单元边界和单元平均方法。这使得能够使用来自不同来源的数据，确定哪些数据是可比较的，并允许建造有着强力的提取、重新插值和显示能力的应用。Unidata 在2007年至2011年开发了LibCF库。

并行netCDF
--------

并行netCDF扩展包建造在MPI-IO之上，它是对MPI的I/O扩展。使用高层netCDF数据结构，并行netCDF库可以进行优化而在多处理器间高效分配文件读和写应用。并行netCDF包只可以读/写经典和64-bit偏移量格式。并行netCDF不能读或写在netCDF-4.0中可获得的基于HDF5的格式。并行netCDF包使用不同但类似的Fortran和C的API。

在Unidata netCDF库中自从版本4.0已经支持对HDF5数据文件的并行I/O。Unidata netCDF C库自从版本4.1.1使用并行netCDF库支持对经典和64-bit偏移量文件的并行 I/O，但使用netCDF API。

与其他格式库的互操作性
-----------

netCDF C库，和基于它的库：Fortran 77和Fortran 90、C++和所有第三方库，自从版本4.1.1开始可以读一些其他数据格式的数据。HDF5格式的数据可以读取，但有一些限制。使用HDF4科学数据（SD）API建立的HDF4格式的数据，可以用netCDF C库读取。

netCDF-Java通用数据模型
-----------------

netCDF-Java库目前已经能够读取很多文件格式和远程访问协议，并且正在开发对一些其他的格式的支持。因为这些都是通过netCDF API透明的进行访问，netCDF-Java库被称为实现了科学数据集的"通用数据模型"。

参见
--

* 通用数据格式 (CDF)
* CGNS (CFD General Notation System)
* EAS3（英语：） (Ein-Ausgabe-System)
* FITS (Flexible Image Transport System)
* GRIB (GRIdded Binary)
* 层级数据格式（HDF）
* OPeNDAP（英语：） 客户-服务器协议
* Tecplot（英语：） 二进制文件
* XMDF（英语：） (eXtensible Model Data Format)

引用
--

1. ↑ . 2023年3月17日.
2. ↑ . Opengeospatial.org.  [2013-11-27]. （原始内容存档于2017-11-30）.
3. ↑ .  [2019-06-08]. （原始内容存档于2018-06-19）.
4. ↑ .  [2023-10-09]. （原始内容存档于2023-10-10）.
5. 1 2 .  [2023-10-09]. （原始内容存档于2023-10-10）.
6. ↑ .  [2019-06-05]. （原始内容存档于2019-06-05）.
7. ↑ .  [2023-10-09]. （原始内容存档于2023-10-10）.
8. ↑ .  [2023-10-09]. （原始内容存档于2023-10-08）.
9. ↑  CDF-5 file format specification （页面存档备份，存于）.
10. ↑ .  [2023-10-09]. （原始内容存档于2023-10-10）.
11. ↑ . hackage.haskell.org. 2014-07-10  [2014-07-10]. （原始内容存档于2014-07-09）.
12. ↑ .  [2017-12-04]. （原始内容存档于2017-11-29）.
13. ↑ .  [2023-10-08]. （原始内容存档于2023-10-10）.
14. ↑ .  [2016-09-07]. （原始内容存档于2016-09-01）.
15. ↑ .  [2023-10-08]. （原始内容存档于2023-10-12）.
16. ↑ . Pyngl.ucar.edu. 2011-07-28  [2013-11-27]. （原始内容存档于2013-11-25）.
17. ↑  David Pierce (2014). ncdf4: Interface to Unidata netCDF (version ) format data files. R package version 1.13.  （页面存档备份，存于）
18. ↑  Pavel Michna and with contributions from Milton Woods (2015). RNetCDF: Interface to NetCDF Datasets. R package version 1.7-3.
19. ↑  russ.. Unidata.ucar.edu. 1990-01-01  [2013-11-27]. （原始内容存档于2013-12-02）.
20. ↑  NCO（页面存档备份，存于）
21. ↑  ncview（页面存档备份，存于）
22. ↑  NCAR命令语言（页面存档备份，存于）
23. ↑  GDAL（页面存档备份，存于）
24. ↑ . Gdal.org.  [2013-11-27]. （原始内容存档于2013-06-06）.
25. ↑  Panoply（页面存档备份，存于）
26. ↑  Metview（页面存档备份，存于）
27. ↑  Ferret（页面存档备份，存于）
28. ↑  HDFql（页面存档备份，存于）
29. ↑  COARDS（页面存档备份，存于）
30. ↑  NetCDF Conventions （页面存档备份，存于）.
31. ↑  LibCF库（页面存档备份，存于）
32. ↑ .  [2023-10-09]. （原始内容存档于2023-10-10）.

外部链接
----

* 官方网站 在维基数据上编辑此内容
* CF Metadata Home Page（页面存档备份，存于）
* PnetCDF: A Parallel I/O Library for NetCDF File Access（页面存档备份，存于）
* netCDF-Java project（页面存档备份，存于） at UCAR