log1p()应用于整个arma::vec的适当方法是什么?似乎有log()exp()的矢量化版本,但没有log1p()。我发现NumericVector有语法糖,所以我最终将arma::vec转换为NumericVector,应用log1p(),然后转换回:

#include <RcppArmadillo.h>

using namespace Rcpp;

// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
arma::vec test_log1p( arma::vec v )
{
  // arma::vec res = log1p(v);         // results in a compilation error
  NumericVector v1 = log1p( wrap(v) );
  arma::vec res = as<arma::vec>(v1);
  return res;
}


有没有更优雅的方式做到这一点?

最佳答案

使用Armadillo向量和矩阵可用的.transform().for_each()设施。例:

v.transform( [](double val) { return log1p(val); } );


要么

v.for_each( [](double& val) { val = log1p(val); } );  // note the & character


您可能需要使用std前缀:std::log1p()而不是log1p()

关于c++ - RcppArmadillo中的向量化log1p(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53183176/

10-11 17:43