R与Rcpp中的斐波那契数
我只是想检查在R和Rcpp中生成Fiboncci数的执行速度。令我惊讶的是,我的R函数比我的Rcpp函数更快(也是线性增长的)。这里出了什么问题 R代码:R与Rcpp中的斐波那契数,r,rcpp,R,Rcpp,我只是想检查在R和Rcpp中生成Fiboncci数的执行速度。令我惊讶的是,我的R函数比我的Rcpp函数更快(也是线性增长的)。这里出了什么问题 R代码: fibo = function (n){ x = rep(0, n) x[1] = 1 x[2] = 2 for(i in 3:n){ x[i] = x[i-2] + x[i-1] } return(x) } Rcpp代码: #include <Rcpp.h>
fibo = function (n){
x = rep(0, n)
x[1] = 1
x[2] = 2
for(i in 3:n){
x[i] = x[i-2] + x[i-1]
}
return(x)
}
Rcpp代码:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
IntegerVector fibo_sam(int n){
IntegerVector x;
x.push_back(1);
x.push_back(2);
for(int i =2; i < n; i++){
x.push_back(x[i - 2] + x[i-1]);
}
return(x);
}
#包括
使用名称空间Rcpp;
//[[Rcpp::导出]]
积分向量fibo_sam(int n){
积分x;
x、 推回(1);
x、 推回(2);
for(int i=2;i
您的Rcpp代码的问题在于,您正在增加向量,而不是在开始时分配大小。尝试:
// [[Rcpp::export]]
IntegerVector fibo_sam2(int n) {
IntegerVector x(n);
x[0] = 1;
x[1] = 2;
for (int i = 2; i < n; i++){
x[i] = x[i-2] + x[i-1];
}
return(x);
}
PS1:检查您的第一个值
PS2:注意大数(见)
谢谢,我不知道C++中预先分配的大小。刚刚检查,他们不知道,但是它们在Rcpp.yeah很重要,<代码> PuxSuffe每次都是完整的副本,我们记录了“代码> PurthBuffe<代码>对于那些寻求STL接口的人来说是“方便”的。但不应将其作为实现它的唯一方法,而是要求这些完整副本。比奈的公式是一种很好的方法:fibonacci
Unit: microseconds
expr min lq mean median uq max neval cld
fibo(1000) 99.989 102.6375 157.42543 103.962 106.9415 4806.395 100 a
fibo_sam(1000) 493.320 511.8615 801.39046 534.044 590.4945 2825.168 100 b
fibo_sam2(1000) 2.980 3.3110 10.18763 3.642 4.3040 573.443 100 a