2012-03-06 2 views
1

私は、線形代数の標準であるすべての機能を備えたライブラリを探しています。行列式、行列逆行列、乗算などですが、一般的です。CまたはC++の行列計算のためのオープンソースのテンプレートライブラリはありますか?

Octaveは、複素数演算と複素数演算のための完全なライブラリを持っていますが、私は算術演算の実装を変更する必要があります。

+1

ここに1つの場所があります:http://scicomp.stackexchange.com/questions/351/recommendations-for-a-usable-fast-c-matrix-library –

+0

ありがとうDavid!そこから選ぶべきものがたくさんあります! –

答えて

6

Eigenは確かにC++の中では最高の行列ライブラリです。

http://eigen.tuxfamily.org/index.php?title=Main_Page

私は温かくあなたを示唆しています。

たとえば、このコードでは、ランダムな10×10のマトリックスを作成し、その逆数を計算する:

MatrixXd A(10,10); 
A.setRandom(10,10); 
MatrixXd B = A.inverse(); 

あなたは、このような分解、線形システムの解決や他のジオメトリアルゴリズムなど、すべての数値行列代数もの、にアクセスすることができます。

これはヘッダーのみであり、外部依存関係はなく、インストールされていません。 これは、幅広い範囲のコンパイラで動作し、非常によく操作され、文書化されています。

1

Eigen:小規模な固定サイズの行列と大きな動的割り当て行列の両方ですばやく動作します。しかし、少し異なる機能を持っているArmadilloを見たいかもしれません。特に2つの索引(次元)ではなく3つの配列をサポートしています。

+1

個人的な経験から、[Armadillo](http://arma.sourceforge.net)はMatlabに似た関数/ APIを提供しています。これは、MatlabとC++の間を移動する際に考慮する重要な要素です(例えば、本番用の変換コード)。 – mtall

+0

私はEigenでこれが問題になることはありませんでした。また、一般的に(時には大きなマージンによって)より速くなることもあります。だから、デフォルトでは、私は、固有の理由がない限り固有値を使う傾向があります。 –

+0

正直に言うと、ヘッダーのみのライブラリーを使用するのはとても簡単ですし、gcc/mscのクロスコンパイルを行っているので、バイナリ依存関係を取ることは本当に好きではありません。固有値の可能性のある欠点は、実装の詳細についてかなりの知識があることを前提としていることです。固定サイズの方がよい動的に割り当てられた行列を使用するか、一時的な一時停止とエイリアシングを考慮しないとかなりのパフォーマンスを失うことがあります。だから、それは少し壊れやすいことが大きな利点です。 –