C#NetCDF库
我目前正在(或者至少计划)几个使用大量重复数据的项目。在电子表格或者数据库中运行良好但在XML中令人讨厌的数据类型。 :)
NetCDF似乎是文件格式的绝佳选择。但是,我的工作是在Cand上,没有可用的"官方" NetCDF实现。我有可能与IronPython一起使用"官方" Python版本。另一个选择是CodePlex上的"用于.Net的NetCDF库",但它似乎很安静(http://www.codeplex.com/netcdf)。
有没有人使用这些库中的任何一个?我们能提供任何建议吗?
解决方案
回答
首先,我们确定NetCDF是正确的选择吗?如果我们想与其他需要读取大量数据且已经支持NetCDF的程序进行交互,那么这可能是一个不错的选择。支持大型多维数组的标准文件和支持广泛的文件格式并不多。但是,如果我们只打算从C#读取和写入文件,那么它可能不是一个好选择。
我非常喜欢"经典" NetCDF文件格式。它结构紧凑,极其简单,但足够灵活以支持许多常见的多维结构良好的数据。我花了一天的时间为经典的NetCDF编写了一个完整的解析器,并且只花了一个小时的时间编写了一个程序来输出格式正确的经典NetCDF文件。我们可以自己实现一个纯CNetCDF库,这不会有太大麻烦。我们可以轻松地从仅实现所需的功能开始。这是规格。
不幸的是,NetCDF-4选择使用HDF-5作为其数据格式。它增加了很多复杂性,并且使用另一种语言编写完整的NetCDF解析器变得更加困难。 HDF-5非常通用,在我看来,它是过度设计的,它试图对太多人使用太多东西。我不建议我们尝试直接使用它,除非我们计划花费一个月的时间编写单元测试。如果必须使用C#中的netCDF-4 / HDF-5,则唯一可行的选择是使用SWIG或者类似方法包装C库。
请注意,用于Python的NetCDF只是C代码的包装,因此,它并不是真的那么有用。如果要使用包装的C库,则最好编写一个Cwrapper而不是使用Python作为中间层。
回答
在一个项目中,我们在使用ikvm时使用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