私はC++で多変量ガウス分布の確率密度関数を実装することに取り組んでおり、次元が2より大きい場合を最適に処理する方法に固執しています。
ガウス分布のpdfは次のように書くことができます
ここで、(A)'またはA'は、xのすべての要素から平均を減算することによって作成された'行列'の転置を表します。この方程式では、kは次元数であり、シグマはakxk行列である共分散行列を表します。最後に、| X | 行列Xの行列式を意味します。
単変量の場合、pdfの実装は簡単です。二変量(k = 2)の場合でも、それは些細なことです。ただし、2次元を超えると、実装ははるかに困難になります。
二変量の場合、
ここで、rhoはxとyの間の相関であり、相関は次のようになります。
この場合、Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>
Eigenの単純化された線形代数インターフェースの恩恵を受けることなく、最初の方程式を実装するために使用することも、2番目の方程式を使用してすべてを自分で計算することもできます。
多変量の場合の試みについての私の考えは、おそらく上記の方程式を多変量の場合に拡張することから始まります。
と
私の質問は次のとおりです。
- n次元配列にを使用するのが適切/推奨されます
boost::multi_array
か、それとも代わりにEigenを活用する必要がありますか? - 単変量/二変量の場合に別々の関数を使用する必要がありますか、それとも、boost :: multi_array(または適切な代替)を使用してすべてを多変量の場合に抽象化する必要がありますか?