提问人:JohnV 提问时间:9/13/2008 最后编辑:Brian Tompsett - 汤莱恩JohnV 更新时间:12/1/2016 访问量:13961
C# NetCDF 库
C# NetCDF Library
问:
我目前正在从事(或至少计划)几个处理大量重复数据的项目。这种数据在电子表格或数据库中运行良好,但在 XML 中却很讨厌。:)
NetCDF 似乎是文件格式的绝佳选择。但是,我的工作是用 C# 编写的,没有可用的“官方”NetCDF 实现。有一个“官方”的 Python 版本,我可能会与 IronPython 一起使用。另一个选项是 CodePlex 上的“NetCDF Library for .Net”,但它看起来很安静 (http://www.codeplex.com/netcdf)。
有没有人使用过这些库中的任何一个?你能提供任何建议吗?
答:
首先,您确定 NetCDF 是正确的选择吗?如果您想与其他需要读取大量数据的程序进行交互,并且它们已经支持 NetCDF,那么它可能是一个不错的选择。支持大型多维数组的标准文件格式并不多。但是,如果您只想从 C# 读取和写入文件,那么它可能不是一个好的选择。
我是“经典”NetCDF 文件格式的忠实粉丝。它紧凑且极其简单,但足够灵活,可以支持许多常见的多维结构良好的数据。我只花了一天时间就为经典的NetCDF编写了一个完整的解析器,也只花了一个小时就编写了一个程序来输出一个经典NetCDF文件的格式良好的特例。您可以自己实现一个纯 C# NetCDF 库,这不会有太大的麻烦。您可以轻松地从仅实现所需的功能开始。这是规范。
不幸的是,NetCDF-4 选择使用 HDF-5 作为其数据格式。它增加了很多复杂性,使得用另一种语言编写完整的 NetCDF 解析器变得更加困难。HDF-5 非常通用,在我看来,它被过度设计了——它试图对太多人做太多事情。我不建议尝试直接使用它,除非你打算花一个月的时间编写单元测试。如果您必须使用 C# 中的 netCDF-4 / HDF-5,您唯一现实的选择是使用 SWIG 或类似的东西包装 C 库。
请注意,NetCDF for Python 只是 C 代码的包装器,因此它并没有那么有用;如果你打算使用一个包装的 C 库,你不妨只编写一个 C# 包装器,而不是使用 Python 作为中间层。
评论
在一个项目中,我们使用 ikvm 在 c# 中使用 ucar netcdf 实现。IKVM 可用于将 java 项目“转换”为 .Net 库,而无需使用 java VM。我没有做过任何性能检查,但这是在 c# :) 中获取 netcdf 的简单方法。
http://www.ikvm.net/stories.html
http://www.unidata.ucar.edu/downloads/netcdf/netcdf-java-4/index.jsp
我现在添加这个,因为这是我在谷歌上搜索这个话题时的最佳答案。
伊塔根据下面的回复,现在有另一个 Microsoft NetCDF 库可用:
https://www.nuget.org/packages/SDSLite
科学数据集精简版 1.4.0
这是一个用于操作 netCDF、CSV 和 TSV 文件的跨平台库。
由于这个问题最初是被提出和回答的,Microsoft 发布了一个支持 NetCDF 的科学数据集库
http://research.microsoft.com/en-us/downloads/ccf905f6-34c6-4845-892e-a5715a508fa3/
项目介绍
SDS 库使 .Net 开发人员可以轻松读取、写入和共享标量、向量、矩阵和多维网格,这些在科学建模中非常常见。支持CSV、NetCDF等文件格式
使用该库的程序将相关数据和关联的元数据存储在一个紧凑的自描述包中。 库附带了一组实用工具和包:sds 命令行实用工具、DataSet Viewer 应用程序和 Microsoft Excel 2007(及更高版本)的加载项。有关详细信息,请参阅发布页面。
现在Microsoft已经发布了一个更新的netCDF库,可通过NuGet获得:
https://www.nuget.org/packages/SDSLite
科学数据集精简版 1.4.0
这是一个用于操作 netCDF、CSV 和 TSV 文件的跨平台库。
评论