相关疑难解决方法(0)

dmvnorm MVN密度 - RcppArmadillo实现比R包慢,包括一点Fortran

解决方案现已在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)

r rcpp

3
推荐指数
1
解决办法
1258
查看次数

标签 统计

r ×1

rcpp ×1