平均値を求めるくらいなら,何の差もないだろうと...
最初に,素直にベクトル要素に添え字でアクセスしてみたら,mean 関数の速度の半分ほど(要するに,遅いと言うこと)。
「これではならじ」と,ポインタを使って書いたら,
src <- '
Rcpp::NumericVector x(X);
int n = x.length();
double *p;
double sum = 0;
p = REAL(x);
for (int i = 0; i < n; i++) {
sum += *p++;
}
return wrap(sum/n);
'
library(inline)
Mean <- cxxfunction(signature(X="numeric"), src, plugin="Rcpp")
倍速にはなった。
しかし,この場合も他と比べてなんという発見もない。
> x <- rnorm(100000000)
> system.time(a <- mean(x))
ユーザ システム
0.38000000000000966338121 0.00099999999999944577667
経過
0.38300000000003819877747
> system.time(b <- Mean(x))
ユーザ システム
0.17300000000000181899 0.00000000000000000000
経過
0.17199999999991177901
> dump(a)
a = -0.000169827373561765
> dump(b)
b = -0.000169827373561735
> a == b
[1] FALSE
> a-b
[1] -2.99781900692241976e-17
100000000 個のデータの平均値が,たかだか 0.4 秒なんだから。
シミュレーションで 1 日に約 20 万回やれるということです。
※コメント投稿者のブログIDはブログ作成者のみに通知されます