「深刻な」行列を行う多くの人々は、より高度な数学のために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 実装) を使用できます。