gpt4 book ai didi

r - 如何在 RcppEigen 中使用 pi?

转载 作者:行者123 更新时间:2023-12-01 01:11:59 27 4
gpt4 key购买 nike

我对 Rcpp 很陌生,或者更具体地说 RcppEigen , 并且在纠结如何使用 pi作为我的代码中的常量。该代码在 MCMC 算法中运行了很多次,因此任何速度改进都是完美的。目前,我每次调用该函数时都会交出 pi,如以下代码所示:

require(RcppEigen)
require(inline)

I.Cpp <- "
using Eigen::Map;
using Eigen::MatrixXd;
using Eigen::VectorXd;
using Rcpp::NumericVector;

const Map<MatrixXd> delta(as<Map<MatrixXd> >(delta0));
const Map<VectorXd> d(as<Map<VectorXd> >(DD));
const Rcpp::NumericVector tpi(pie);
double pi = tpi[0];

const MatrixXd I = delta.transpose() * d.asDiagonal() * pi * pi;
return wrap(I);
"

I.cpp <- cxxfunction(signature(delta0 = "matrix", DD = "numeric", pie = "numeric"), I.Cpp, plugin = "RcppEigen")


delta0 <- matrix(rnorm(25), 5)
DD <- rnorm(5)

I.cpp(delta0, DD, pi) # this piece of code gets called multiple times?

我的问题:如何使用常量 piRcppEigen 内没有在每次调用 I.cpp 时传递它?

最佳答案

首先,grep pi/usr/share/R/include/你会发现例如

  #define M_PI        3.141592653589793238462643383280    /* pi */


这样你就有了使用 R 的地方,例如这里使用 Rcpp 和 RcppEigen。

例子:
R> getpi <- cppFunction('double twopi() { return M_PI; } ')
R> getpi()
[1] 3.142
R> print(getpi(), digits=20)
[1] 3.141592653589793116
R>

我相信这也在数学标题中。 [ 去检查:是的,从 math.h 开始. ] 可能多次。通过其他来源进行搜索也可以取得丰硕的成果。

关于r - 如何在 RcppEigen 中使用 pi?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14947431/

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