8

優れた (最善の場合、積極的に維持されている) C++ マトリックス ライブラリを探しています。有理数の複合体を数値型として使用したいので、テンプレート化する必要があります。私が扱っている行列は、主にまばらでユニタリです。

ライブラリを提案し、それらを使用する理由を簡単に説明してください.

編集:

私が扱っている主な操作は、行列の乗算ベクトルクロネッカー積によるスカラー乗算です。行列のサイズは指数関数的であり、少なくとも 1024x1024 エントリまでの行列を処理できるようにしたいと考えています。

4

3 に答える 3

10

「深刻な」行列を行う多くの人々は、より高度な数学のためにLAPACK / ATLAS (通常の行列) またはUMFPACK (スパース行列) を追加して、 BLASに依存しています。その理由は、このコードが十分にテストされ、安定しており、信頼性が高く、非常に高速だからです。さらに、アーキテクチャーに合わせて調整されたベンダー ( Intel MKLなど)から直接購入することも、無料で入手することもできます。マヌエルの回答で言及されているuBLASは、おそらく標準の C++ BLAS 実装です。後で LAPACK のようなものが必要になった場合は、そのためのバインディングがあります。

ただし、これらの標準ライブラリ (BLAS / LAPACK / ATLAS または uBLAS + バインディング + LAPACK / ATLAS) のいずれも、テンプレート化されて使いやすいというボックスにチェックマークを付けません (uBLAS だけが必要な場合を除きます)。実際のところ、BLAS / LAPACK 実装を使用するときは、C / Fortran インターフェースを直接呼び出す傾向があることを認めなければなりません。uBLAS + バインディングの組み合わせには、追加の利点があまり見られないことが多いからです。

使いやすい汎用 C++ 行列ライブラリが必要な場合は、Eigen を使用する傾向があります(以前は NewMat使用していました)。利点:

  • Intel アーキテクチャでは非常に高速で、小さな行列ではおそらく最速
  • 素敵なインターフェース
  • マトリックス ライブラリに期待するほとんどすべて
  • 新しいタイプを簡単に追加できます

短所(IMO):

  • シングルプロセッサ [編集: Eigen 3.0で部分的に修正]
  • ATLAS や Intel MKL よりも大きな行列や一部の高度な数学 (LU 分解など) では遅くなります [編集: Eigen 3.0 でも改善されました]
  • スパース行列の実験的サポートのみ [編集:次期バージョン 3.1 で改善]。

編集:今後の Eigen 3.1 では、一部の関数で Intel MKL (またはその他の BLAS / LAPACK 実装) を使用できます。

于 2010-02-08T16:15:47.923 に答える
4

ブーストフィルターを通過したため、ブーストuBLAS 。

疎行列をサポートするテンプレートライブラリがいくつかあるため、ニーズについてより具体的でない場合、より良い理論的根拠を思い付くのは非常に困難です。

于 2010-02-08T15:26:17.520 に答える
1

また、 MLTHASEM Matrix C++ ライブラリも試してみてください。最後のものは非常によく文書化されています。

于 2012-02-14T15:58:18.253 に答える