私はC++で多変量ガウス関数の確率密度関数を実装しようとしていますが、dimension> 2の場合をどのように扱うのが最善でしょうか。C++で2次元以上の多変量ガウス確率密度関数を実装する
ガウスのPDFは
(A)「またはA」のように書くことができるが、xのすべての要素から平均値を減算することによって作成された 『マトリックス』の転置を表します。この方程式では、kは私たちが持っている次元の数であり、sigmaはk x k行列である共分散行列です。最後に、| X |行列Xの行列式を意味します。
単変量の場合、pdfの実装は簡単です。二変量(k = 2)の症例でさえ、それは自明である。しかし、2次元以上になると、実装ははるかに難しくなります。二変量場合
、我々は、Rhoは、私は、この場合に
に等しい相関を用いて、xとyとの間の相関である
を有しているだろうEigenの単純化された線形代数インターフェースの恩恵を受けずに、Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>
を使用して最初の式を実装するか、2番目の式を使用してすべてを自分で計算することができます。
私の考えは、おそらく私の質問があり
と多変量の場合
に、上記の式を拡張することにより開始します
- n次元配列に
boost::multi_array
を使用することをお勧めしますか、代わりにEigenを利用しようとするべきですか? - 単変量/二変量のケースに対して別々の関数( )を使用するか、 boost :: multi_array(または適切な代替)を使用して多変量のケースにすべてを抽象化する必要がありますか?
Oof!さて、これまでに何を試しましたか? :D –
適切な応答はもちろん、行列操作をサポートする数値ライブラリを使用することです。 uBLAS/LaPackはこれを提供していませんか?とにかく、 'multi_array'(または何らかの自作)を使うことは、おそらく*良い考えではないでしょう。 –