Вопрос

В настоящее время я работаю (или, по крайней мере, планирую) над парой проектов, которые работают с большими объемами повторяющихся данных.Такие данные хорошо работают в электронных таблицах или базах данных, но плохо работают в XML.:)

NetCDF кажется отличным вариантом формата файла.Однако я работаю на C#, и «официальной» реализации NetCDF не существует.Существует «официальная» версия Python, которую я потенциально мог бы использовать с IronPython.Другой вариант — «Библиотека NetCDF для .Net» на CodePlex, но он кажется довольно тихим (http://www.codeplex.com/netcdf).

Кто-нибудь работал с любой из этих библиотек?Можете ли вы дать какие-либо рекомендации?

Это было полезно?

Решение

Во-первых, уверены ли вы, что NetCDF — правильный выбор?Если вы хотите взаимодействовать с другими программами, которым необходимо читать большие объемы данных и они уже поддерживают NetCDF, то это, вероятно, отличный выбор.Существует не так уж много стандартных и хорошо поддерживаемых форматов файлов, поддерживающих большие многомерные массивы.Но если вы собираетесь читать и записывать файлы только на C#, это может оказаться не таким уж хорошим выбором.

Я большой поклонник «классического» формата файлов NetCDF.Он компактен и чрезвычайно прост, но достаточно гибок, чтобы поддерживать множество распространенных типов многомерных и хорошо структурированных данных.Мне потребовался всего один день, чтобы написать полный анализатор классического NetCDF, и всего час потребовалось, чтобы написать программу для вывода правильно сформированного частного случая классического файла NetCDF.Вы можете самостоятельно реализовать чистую библиотеку C# NetCDF, и это не составит большого труда.Вы можете легко начать с реализации только тех функций, которые вам нужны. Вот спецификация.

К сожалению, NetCDF-4 решил использовать HDF-5 в качестве формата данных.Это значительно усложняет и значительно усложняет написание полноценного парсера NetCDF на другом языке.HDF-5 очень универсален и, на мой взгляд, он слишком переработан — он пытается дать слишком много вещей слишком многим людям.Я бы не рекомендовал пытаться работать с ним напрямую, если вы не планируете потратить месяц на написание модульных тестов.Если вам необходимо использовать netCDF-4/HDF-5 из C#, единственным реалистичным вариантом будет обертывание библиотеки C с помощью SWIG или чего-то в этом роде.

Обратите внимание, что NetCDF для Python — это всего лишь оболочка кода C, поэтому на самом деле это не так уж и полезно;если вы собираетесь использовать обернутую библиотеку C, вы можете просто написать оболочку C #, а не использовать Python в качестве среднего уровня.

Другие советы

Я добавляю это сейчас, потому что это был самый популярный ответ, когда я искал в Google эту тему.


расчетное время прибытия Согласно ответу ниже, теперь доступна ДРУГАЯ библиотека Microsoft NetCDF:

https://www.nuget.org/packages/SDSLite

Научный набор данных Lite 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

Научный набор данных Lite 1.4.0

Это кроссплатформенная библиотека для работы с файлами netCDF, CSV и TSV.

В проекте мы используем реализацию ucar netcdf на C# с использованием ikvm.IKVM можно использовать для «преобразования» Java-проектов в библиотеки .Net без использования виртуальной машины Java.Я не проверял производительность, но это простой способ получить netcdf на С# :).

http://www.ikvm.net/stories.html

http://www.unidata.ucar.edu/downloads/netcdf/netcdf-java-4/index.jsp

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top