我正在努力在 C++ 中实现多元高斯的概率密度函数,我一直坚持如何最好地处理维度 > 2 的情况。
高斯的pdf可以写成
其中 (A)' 或 A' 表示通过从 x 的所有元素中减去平均值创建的“矩阵”的转置。在这个方程中,k是我们拥有的维数,sigma代表协方差矩阵,也就是akxk矩阵。最后,|X| 表示矩阵 X 的行列式。
在单变量情况下,实现 pdf 是微不足道的。即使在双变量 (k = 2) 的情况下,它也是微不足道的。然而,当我们超越二维时,实现起来就困难得多。
在双变量情况下,我们有
其中 rho 是 x 和 y 之间的相关性,相关性等于
在这种情况下,我可以使用Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>
第一个方程来实现,或者只使用第二个方程自己计算所有内容,而无需受益于 Eigen 的简化线性代数接口。
我对多变量情况的尝试可能会从将上述方程扩展到多变量情况开始
和
我的问题是:
- 将 a 用于 n 维数组是否合适/建议
boost::multi_array
,还是我应该尝试利用 Eigen? - 我应该为单变量/双变量案例设置单独的函数,还是应该使用 boost::multi_array (或适当的替代方法)将其全部抽象为多变量案例?