c++多数据平均数_Rcpp高性能计算(四):求几何平均数效果比较【END】

本文介绍了使用Rcpp在R中实现几何平均数计算,通过对比R内置方法,展示了Rcpp的性能优势。作者黄天元博士探讨了Rcpp在数据科学中的应用,强调在遇到计算瓶颈时可以考虑使用Rcpp提升效率。
摘要由CSDN通过智能技术生成

作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(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

我们可以看到,两者的写法几乎一样(因为Rcpp有语法糖,因此两者写法没有太大差异),但是运行时间几乎差了一倍。因此,在计算的时候遇到瓶颈,就可以寻求Rcpp的帮助。

Rcpp的学习就此结束了,以后根据需要来进行新的学习。虽然不能说很会写C++,但是网络上关于C++的问答资料,那是比R还要多的,所以不虚。R的好处就是,掌握了框架,要用就去延展,而不是一点一点死磕。希望未来能够利用Rcpp获得更高的计算性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值