Rcpp高性能计算(四):求几何平均数效果比较【END】
作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言高效数据处理指南》(《R语言数据高效处理指南》(黄天元)【摘要 书评 试读】- 京东图书)。知乎专栏:R语言数据挖掘。邮箱:huang.tian-yuan@qq.com.欢迎合作交流。
前段时间想开Rcpp系列,后来发现了神书Rcpp for everyone(https://teuder.github.io/rcpp4everyone_en/)之后,就停了下来。实践中不是所有任务都需要加速,但是用了Rcpp是会快,哪怕写法是如此的相似。今天就来做一个实践,就是求几何平均数。前些日子看到帖子(「R」如何计算几何平均数),引用了SO上R求几何平均数的方法(Geometric Mean: is there a built-in?),因此想借此机会看看用Rcpp是否能够为这个任务加速。试验如下:
library(Rcpp)
library(microbenchmark)
# R
geo_mean_r = function(x) exp(mean(log(x)))
# C++
cppFunction('
double geo_mean_c(NumericVector x){
return exp(mean(log(x)));
}
')
# test
microbenchmark::microbenchmark(
geo_mean_r(c(45,89,90)),
geo_mean_c(c(45,89,90)),
times = 10000
)
#> Unit: microseconds
#> expr min lq mean median uq max neval
#> geo_mean_r(c(45, 89, 90)) 3.4 3.9 5.65590 4.1 4.8 2836.6 10000
#> geo_mean_c(c(45, 89, 90)) 1.1 1.6 2.96767 2.6 3.1 953.0 10000
相关文章