【发布时间】:2011-08-25 11:46:30
【问题描述】:
我正在努力在 C++ 中实现多元高斯的概率密度函数,但我一直在思考如何最好地处理维度 > 2 的情况。
高斯的pdf可以写成
其中 (A)' 或 A' 表示通过从 x 的所有元素中减去平均值创建的“矩阵”的转置。在这个等式中,k 是我们拥有的维数,sigma 表示协方差矩阵,它是一个 k x k 矩阵。最后,|X|表示矩阵 X 的行列式。
在单变量情况下,实现 pdf 是微不足道的。即使在双变量 (k = 2) 的情况下,它也是微不足道的。然而,当我们超越二维时,实现起来就困难得多。
在双变量情况下,我们有
其中 rho 是 x 和 y 之间的相关性,相关性等于
在这种情况下,我可以使用Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> 来实现第一个方程,或者只使用第二个方程自己计算所有内容,而无需受益于 Eigen 的简化线性代数接口。
我对多变量情况的尝试可能会从将上述方程扩展到多变量情况开始
与
我的问题是:
- 是否适合/建议使用
boost::multi_arrayn 维数组,还是我应该尝试利用 Eigen? - 我是否应该为单变量/双变量案例设置单独的函数? 或者我应该使用 boost::multi_array(或适当的替代方案)?
【问题讨论】:
-
哎呀!那么,到目前为止,您尝试了什么? :D
-
这里合适的回应当然是使用支持矩阵运算的数值库。 uBLAS/LaPack 不提供这个吗?无论如何,使用
multi_array(或任何自制的东西)很可能不是一个好主意。
标签: c++ boost statistics eigen