gpt4 book ai didi

c++ - RcppArmadillo 中的向量化 log1p()

转载 作者:太空宇宙 更新时间:2023-11-04 14:59:57 25 4
gpt4 key购买 nike

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;
}

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

最佳答案

再一次,细节决定成败。

对于初学者来说,RcppArmadillo 没有“Sugar”,所以您的推理是有缺陷的——您不能只查看在 Rcpp::NumericVector 上运行的 Rcpp Sugar 函数。

话又说回来,人们可以像您一样进行转换。但是您选择了昂贵的转换。查看显式重用内存的高级构造函数——不需要拷贝。

一个更简单和更直接(但局部)的方法就是添加一个小的局部内联函数。这就是我会做的 :) 在几分钟内完成。

最后,我们有一些兄弟项目将 Rcpp Sugar 概括为可以采用迭代器的任何东西。那就是“高速公路”,它可以进行一些新的开发。也许开始 at this repo .

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com