该解决方案现已在Rcpp Gallery中联机
我从RcppArmadillo的mvtnorm包中重新实现了dmvnorm.我不知何故喜欢犰狳,但我想它也适用于普通的Rcpp.来自dmvnorm的方法基于马哈拉诺比斯距离,所以我有一个函数,然后是多元正态密度函数.
让我告诉你我的代码:
#include <RcppArmadillo.h>
#include <Rcpp.h>
// [[Rcpp::depends("RcppArmadillo")]]
// [[Rcpp::export]]
arma::vec mahalanobis_arma( arma::mat x , arma::mat mu, arma::mat sigma ){
int n = x.n_rows;
arma::vec md(n);
for (int i=0; i<n; i++){
arma::mat x_i = x.row(i) - mu;
arma::mat Y = arma::solve( sigma, arma::trans(x_i) );
md(i) = arma::as_scalar(x_i * Y);
}
return md;
}
// [[Rcpp::export]]
arma::vec dmvnorm ( arma::mat x, arma::mat mean, arma::mat sigma, bool log){
arma::vec distval = mahalanobis_arma(x, mean, sigma);
double logdet …Run Code Online (Sandbox Code Playgroud)