绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Rcpp高性能计算(四):求几何平均数效果比较【END】
2020-07-03 16:09:19

作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言高效数据处理指南》(《R语言数据高效处理指南》(黄天元)【摘要 书评 试读】- 京东图书)。知乎专栏:R语言数据挖掘邮箱:huang.tian-yuan@qq.com.欢迎合作交流。

前段时间想开Rcpp系列,后来发现了神书Rcpp for everyone(teuder.github.io/rcpp4e)之后,就停了下来。实践中不是所有任务都需要加速,但是用了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获得更高的计算性能。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

R语言
创建时间:2020-06-15 11:46:51
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的工具。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 小雨滴
    专家
戳我,来吐槽~