4

私は数学を多用するコードを扱ってきたので、優れた行列ライブラリが必要です。2 次元配列を使用することもできますが、完全な行列ライブラリ (乗算、加算などを含む) の方がはるかに便利です。私は明らかにすでにそれをグーグルで検索しましたが、これにより多くの選択肢が得られました. 数人の経験豊富なプログラマーの意見がそれを絞り込むのに役立つことを望んでいました.

C++ 用の優れた無料の行列/線形代数ライブラリは何ですか?

4

4 に答える 4

6

Eigenは非常に高速な行列操作および線形代数ライブラリであり、利用可能な場合はハードウェア アクセラレーションを使用します。

于 2012-06-16T20:58:42.877 に答える
5

uBlasを試すことができます

機能性

uBLAS は、密ベクトル、単位ベクトル、疎ベクトル、密行列、恒等行列、三角行列、帯状行列、対称行列、エルミート行列、および疎行列用のテンプレート化された C++ クラスを提供します。ベクトルと行列へのビューは、範囲、スライス、アダプター クラス、および間接配列を介して構築できます。このライブラリは、ベクトルと行列に対する通常の基本的な線形代数演算をカバーしています: さまざまなノルムのようなリダクション、ベクトルと行列の加算と減算、スカラーを使用した乗算、ベクトルの内積と外積、行列ベクトルと行列行列の積、および三角ソルバー。コンテナー、ビュー、および式のテンプレート化された操作の間の接着剤は、ほとんどが STL 準拠のイテレーター インターフェイスです。

于 2012-06-16T20:51:27.243 に答える
5

Matlab に似た使いやすい構文を持つIT++もあります。Armadilloも非常によく似た構文を持っていますが、IT++ よりもかなり高速であることが知られています。(Armadillo はテンプレート メタプログラミングを使用しますが、IT++ は使用しません)。Armadillo も IT++ も、固有値分解、特異値分解、逆行列などを提供します。対照的に、uBlasは速度のためにテンプレート メタプログラミングを使用しますが、逆行列などは実行できません。

速度の違いは、さまざまな領域での機能のセットが異なるという点でトレードオフになります。IT++ には信号処理のための多くの関数がありますが、Armadilloはほぼ線形代数に焦点を当てています。

これは関連するポイントをもたらします: ライブラリの速度は、その全体的な有用性または価値の 1 つの要因にすぎません。たとえば、非常に高速なライブラリがあっても、その API や構文を習得するのにかなりの時間がかかる場合や、構文が使いにくい場合などです。もう 1 つの問題は、ライブラリ内に既に存在する機能の量です。独自の関数を作成する必要がある場合があります。また、ライブラリの目的が Matlab コードから C++ への変換を容易にすることであるか、または既に Matlab 構文に精通しているかを検討する必要がある場合もあります。

上記の点を考慮すると、コードを実行するよりもコーディングとデバッグに多くの時間を費やすことになり、最終的には高速ライブラリの目的が無効になります。つまり、生の実行速度は 1 つの要因にすぎず、全体的な決定要因として依存すべきではありません。開発時間も非常に重要な要素です (「製品化までの時間」など)。これは、コストの観点からだけでなく、コーディングに費やす時間が短縮されると他のことを行うことができるためです。

于 2012-06-19T03:15:44.870 に答える
2

以前はアルマジロを使っていました。私はその速度能力について話すことはできません.MATLABの関数と表記法にいくらか類似しているため、友人から勧められました. 私はそれで非常に集中的なことを試しませんでしたが、私がそれを使用した時点で私の目的を果たしました. ここでも推奨されているように、uBlas についても良いことを聞いています。

于 2012-06-17T00:07:48.163 に答える