将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/