DotNumerics、AlgLib、dnAnalytics、Math.net、F# for Numerics、Mtxvec? 質問する

DotNumerics、AlgLib、dnAnalytics、Math.net、F# for Numerics、Mtxvec? 質問する

私は何日も Google と Stack Overflow を必死に検索してきましたが、次の質問に答える最新の完全に関連性のある情報をまだ見つけていません。最適な C#/F#/.NET 数学ライブラリ (具体的には、Lapack などと同じ機能をラップまたは実装するもの) は何ですか?

私が見た Stack Overflow の優れた投稿の 1 つは次の通りです。https://stackoverflow.com/questions/3227647/open-source-math-library-for-f

その投稿や以前の投稿が私の質問に十分に答えなかった理由は、さまざまなライブラリのユーザー エクスペリエンスの体系的な比較が示されていなかったためです。

私は、以下のライブラリが(実際の使用において)Lapack(または同等の線形代数機能の広範なセット)をどの程度完全に実装しているかに興味があります。また、特に非常に大きな行列での、それらの相対的なパフォーマンスについても興味があります。また、さまざまなライブラリを使用した他の人の経験(難しさ、使いやすさなど)についても聞きたいです。

以下は、私が知る限り、線形代数機能セットを備えた「無料」/オープンソース/手頃な価格の .NET/F#/C# 数学ライブラリの包括的なリストです。Stack Overflow のコミュニティの皆さんが、以下のライブラリに関する経験を寄せていただければ、大変ありがたく思います。

私は F# for Numerics に興味があります (F# を使用しているため) が、さまざまなライブラリの長所と短所を確認するのが困難です。たとえば、さまざまなライブラリに欠けている機能や含まれている機能、それらの使いやすさ、パフォーマンスなどです。

DotNumerics は C# での Lapack の包括的な実装のようですが、その経験を共有している人はどこにも見つかりません。Math.NET は最終的には .NET 用の優れた包括的な数学ライブラリになる可能性があるようですが、プロジェクトがどの程度活発であるかを判断するのは難しく、現在の段階では非常に流動的であるようです。Alglib は 1 回か 2 回、堅実であると話題になりましたが、他のものと比較してもっと詳しく聞きたいです。ネイティブ F# 数値ライブラリをサポートするというアイデアは気に入っていますが、開発者 (Flying Frog Consultancy) が Numerics 用の F# のサポートと開発にどの程度熱心であるか、また 1.0 リリースにどのような機能を含める予定か、1.0 リリースの目標日がいつなのかはわかりません。

ベストアンサー1

数学ライブラリを選択する際によくある落とし穴は、あらゆるものに対応する数学ライブラリが存在することを期待してしまうことです。

ライブラリを探す前に、まず「どのような数学ライブラリが欲しいのか」と自問する必要があります。そうすれば、オープンソースかどうか、高性能かどうか、移植性があるかどうか、使いやすいかどうかなどの基準のリストが得られます。

以下は、リストにあるライブラリに関する私のコメントです (最後の 2 つは使用していません)。

1)ドット数値

http://www.dotnumerics.com/

これらは、Lapack プロシージャ コードを C# クラスに変換する Fortran2C# トランスレータを使用します。生の Lapack クラス用に、ユーザー フレンドリな C# ラッパーが記述されています。

2)アルグリブ(http://www.alglib.net/

このライブラリは、Delphi、C++、C# などの複数の言語で利用できます。リストされている他のどのライブラリよりも長い歴史があると思います。

ほとんどの関数は Lapack から翻訳されています。また、そのインターフェースはそれほどユーザーフレンドリーではありません。(ただし、Lapack スタイルのインターフェースの柔軟性はあります。) Lapack スタイルのインターフェースを使用するには、行列とその操作についてさらに詳しく知る必要があります。

3)分析http://dnanalytics.codeplex.com/

このライブラリは現在 Math.Net に統合中です。統合はまだ完了していないようです。dnA のいくつかの関数はまだ Math.Net では利用できません。

4)数学.NEThttp://www.mathdotnet.com/) 実装はゼロから行われており、Lapack からの直接の翻訳ではありません。.Net プラットフォーム用の純粋に管理されたライブラリを提供することを目指しています。つまり、使いやすさと移植性が 2 つの主な目標です。懸念されるのは、独自の実装が正しいかどうかです。良い点の 1 つは、このライブラリが移植可能であることです。つまり、Mono、XNA、Windows Mobile Phone でほとんど手間をかけずに使用できます。

上記のライブラリは F# に焦点を当てていません。ただし、Math.Net のチーム メンバーの 1 人は MS Research Cambridge に勤務しており、F# の専門家です。Cuda が言ったように、彼らはライブラリ用の F# インターフェイスを開発する予定です。また、ネイティブ ラッパーも提供します。ただし、おそらく「数か月」よりも長い時間待つことになるでしょう :)

高いパフォーマンスを懸念して、上記のライブラリはネイティブ ラッパーを提供していません (少なくとも現時点では)。ネイティブ パフォーマンス + .Net が必要な場合は、商用ライブラリを使用することをお勧めします。オープン ソース ソリューションがいくつかあります。

1.翻訳元これは、.Net 用の numpy のようなソリューションです。これらは、Lapack dll (例: netlib の最適化されていない lapack、AMD および Intel の最適化バージョン) に PInvoke します。

2. F# の数学プロバイダー。私の回答を読んでくださいこの質問F# のソースコードがオープンソース化されました。ライブラリを改訂してアップデートをリリースするかもしれません :)

通常、大きな数学ライブラリは必要ありません。必要なのは、いくつかの機能だけです。たとえば、高速な行列乗算手順が必要な場合は、プラットフォームに最適化された BLAS dll に PInovke を使用するのが最も簡単な方法です。子供向けの教育指向の数学ソフトウェアが必要な場合は、Math.net の品質で十分です。企業に所属し、信頼性の高い数学コンポーネントを開発している場合は、高品質のチームに支えられた商用のコンポーネントを使用してみませんか。

完璧な数学ライブラリを見つけるのは難しいです。しかし、問題に対するライブラリソリューションを見つけるのは通常簡単です。

おすすめ記事