DotNumerics, AlgLib, dnAnalytics, Math.net, F # для чисел, Mtxvec? - PullRequest
19 голосов
/ 12 ноября 2010

Я искал в Google и Stack Overflow как сумасшедший в течение нескольких дней, и мне еще не удалось найти какую-либо недавнюю, полностью актуальную информацию, чтобы ответить на следующий вопрос: Каковы лучшие математические библиотеки C # / F # /. NET (особенно те, которые обертывают или реализуют ту же функциональность, что и Lapack, и т. д.)?

Один из лучших постов о переполнении стека, который я видел, был: https://stackoverflow.com/questions/3227647/open-source-math-library-for-f

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

Меня интересует, насколько полно следующие библиотеки (в реальных условиях) реализуют Лапак (или широкий набор эквивалентной линейной алгебры функциональности); и мне интересно, как они работают друг с другом, особенно на очень больших матрицах. Кроме того, я хотел бы услышать об опыте других людей, использующих различные библиотеки: трудности, простота использования и т. Д.

Ниже приведен полный список «бесплатных» / с открытым исходным кодом / доступных по цене .NET / F # / C # математических библиотек, которые, насколько мне известно, имеют набор функций линейной алгебры. Я был бы очень признателен, если бы сообщество здесь, в Stack Overflow, приняло участие в работе со следующими библиотеками:

Меня интересует F # для чисел (так как я работаю с F #), но мне трудно определить сильные и слабые стороны различных библиотек. Например, какие функции отсутствуют или включены в различные библиотеки, и как легко они используются и насколько хорошо они работают.

DotNumerics кажется всеобъемлющей реализацией Lapack в C #, но я нигде не могу найти никого, кто поделится с ним своим опытом. Похоже, что Math.NET в конечном итоге может стать отличной, всеобъемлющей математической библиотекой для .NET, но трудно сказать, насколько активен проект, и кажется, что он находится в постоянном движении на своем текущем этапе. Об Альглибе говорят, что один или два раза он был солидным, но я хотел бы услышать больше о них относительно других. Мне нравится идея поддержки нативной библиотеки чисел F #, но я не уверен, насколько предан разработчик (Flying Frog Consultancy) поддержке и разработке F # для чисел… и какие функциональные возможности они планируют включить в свой выпуск 1.0 и какие целевая дата для версии 1.0.

Ответы [ 3 ]

16 голосов
/ 12 ноября 2010

Одной из распространенных ошибок при выборе математической библиотеки является то, что мы надеемся, что существует математическая библиотека для всего.

Прежде чем найти библиотеку, вы должны сначала спросить «какую библиотеку математики я хочу?».Тогда у вас будет список критериев, таких как открытый исходный код или нет, высокая производительность или нет, портативный или нет, простой в использовании или нет.

Ниже приведены мои комментарии к библиотекам в вашем списке (я не использовал последние два):

1) DotNumerics

(http://www.dotnumerics.com/)

Они используют переводчик fortran2C #, который переводит код процедур Лапака в классы C #. Удобные в использовании оболочки C # написаны для необработанных классов Лапака.

2) Alglib (http://www.alglib.net/)

Эта библиотека доступна на нескольких языках, таких как delphi, c ++ и c #. Я считаю, что она имеет более длинную историю, чем любые другие библиотеки, перечисленные вами.

Большинство функций переведены с LapackИ его интерфейс не так удобен для пользователя. (Но у вас есть гибкость интерфейса в стиле Lapack.) Использование интерфейса в стиле lapack означает, что вам нужно больше узнать о матрице и ее операциях.

3) dnAnalytics (http://dnanalytics.codeplex.com/)

Эта библиотека в настоящее время объединяется с Math.Net. Похоже, что объединение еще не завершено. Некоторые функции в dnA все еще недоступны в Math.Net.

4) Math.NET (http://www.mathdotnet.com/) Его реализация с нуля, то есть это не прямой перевод с Lapack.Они стремятся предоставить чисто управляемую библиотеку для платформы .Net.Это означает, что простота использования и мобильность являются двумя основными целями.Одна проблема заключается в том, является ли их собственная реализация правильной или нет.Хорошо, что эта библиотека переносима в том смысле, что вы можете использовать ее на Mono, XNA, Windows Mobile Phone без особых усилий.

Вышеуказанные библиотеки не фокусируются на F #.Однако один из членов команды в Math.Net работает в MS Research Cambridge и является экспертом F #.Как сказал Cuda, они разработают интерфейс F # для библиотеки.Также они предоставят родные обертки.Но, может быть, вы будете ждать долго, дольше, чем «несколько месяцев»:)

Из-за высокой производительности вышеупомянутые библиотеки не предоставляют встроенные оболочки (по крайней мере, сейчас).Если вам нужна собственная производительность + .Net, вам лучше использовать коммерческую библиотеку.Существует несколько решений с открытым исходным кодом:

1.http://ilnumerics.net/ Это решение, похожее на numpy, для .Net.Они PInvoke to Lapack dll (например, неоптимизированный lapack в netlib, оптимизированные версии от AMD и Intel.)

2.математический провайдер в F #. прочитайте мой ответ в этот вопрос .Так как исходный код F # теперь открыт.Я могу пересмотреть библиотеку и выпустить свои обновления:)

Обычно вам не нужна большая математическая библиотека.Вам просто нужна некоторая функциональность, например, если вам нужна быстрая процедура умножения матриц, использование PInovke для DLL BLAS, оптимизированной для платформы, является самым простым способом.Если вам нужно сделать учебное математическое программное обеспечение для детей, то качества Math.net достаточно.Если вы работаете в компании и разрабатываете надежные математические компоненты, то почему бы не использовать коммерческий компонент, поддерживаемый высококачественной командой?

Найти идеальную математическую библиотеку сложно.Но найти библиотечное решение вашей проблемы обычно легко.

10 голосов
/ 12 ноября 2010

F # для чисел - продукт моей компании, написанный на 100% F #. Мы делаем упор на общих методах (все от БПФ до генерации случайных чисел), а не конкретно на линейной алгебре, хотя предоставляются базовые процедуры линейной алгебры (Cholesky, LU, QR, SVD для различных типов матриц / элементов), и нас особенно интересует простота использовать из F #.

Если вам нужен полный набор LAPACK, то я рекомендую Alglib , если у вас ограниченный бюджет, или Extreme Optimization , если вы можете себе это позволить. Alglib - это полностью управляемый код с «причудливым» API, поэтому его запуск относительно медленный и громоздкий. Extreme Optimization - это более приятный API-интерфейс, объединяющий Intel MKL и некоторые дополнительные подпрограммы, поэтому его проще использовать и намного быстрее запускать.

Я должен предупредить вас, что общее качество библиотек .NET (бесплатных, коммерческих и даже самой инфраструктуры) сравнительно низкое, если вы работаете с открытым исходным кодом. Я перепробовал многие другие библиотеки, которые вы упомянули, и они меня не впечатлили.

1 голос
/ 10 ноября 2011

Я также могу предложить посмотреть новую цифровую библиотеку .net с именем FinMath , которую я использовал в своей разработке. Он предоставляет простые в использовании оболочки класса .net для многих функций MKL (Intel Math Kernel Library, на которых она основана), таких как линейная алгебра (BLAS и LAPACK), статистика и FFT. Кроме того, он также содержит ряд продвинутых методов, таких как решатель линейного и квадратичного программирования, кластерный анализ и другие. Он также включает в себя различные оптимизации .net для нативного маршалинга, что приводит к высокой производительности и простоте использования решения dll.

Но, к сожалению, это не открытый исходный код, не бесплатный и, в отличие от LAPACK, большинство методов поддерживает только операции с плавающей запятой двойной точности. И для немногих редко используемых методов LAPACK оболочки не предусмотрены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...