r - 带替换件的快速排序样本

标签 r performance

基本上,我想做sort(sample(n, replace = TRUE)) , 为 n = 1e6 , 并且多次(例如 1e4 次)。

有什么办法可以在 R(cpp) 中更快地做到这一点?

最佳答案

在 Rcpp 中实现@Frank 的想法:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
IntegerVector sort_sample(int n) {
  IntegerVector tab(n);
  for (int i = 0; i < n; i++) {
    int k = n * unif_rand();
    tab[k]++;
  }
  return tab;
}

基准:
microbenchmark::microbenchmark(
  sort(sample(n, replace = TRUE)),
  tabulate(sample(n, replace = TRUE), n),
  sort_sample(n)
)

对于 n = 1e5:
Unit: microseconds
                                   expr      min       lq      mean    median        uq      max neval
        sort(sample(n, replace = TRUE)) 3214.726 3393.606 3667.1001 3507.0525 3716.3560 7007.411   100
 tabulate(sample(n, replace = TRUE), n) 1087.543 1104.215 1245.0722 1136.9085 1218.5865 4265.075   100
                         sort_sample(n)  789.403  812.780  870.2723  837.3445  924.4395 1188.432   100

对于 n = 1e6:
Unit: milliseconds
                                   expr      min       lq     mean   median       uq       max neval
        sort(sample(n, replace = TRUE)) 49.96651 52.58784 61.19775 55.09312 58.43035 160.16275   100
 tabulate(sample(n, replace = TRUE), n) 13.74391 14.44253 17.22742 15.99816 17.54367  48.72374   100
                         sort_sample(n) 12.80741 14.40371 17.98320 15.31699 17.53548  63.21692   100

关于r - 带替换件的快速排序样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56779135/

相关文章:

RPlumber API - 将数据作为 CSV 而不是 JSON 返回 - 在 mac 上本地工作,但在 ubuntu-16.04 上不工作

r - 是否需要使用facet_grid/wrap来按除用于填充/颜色之外的变量对箱线图进行分组?

c++ - 计算数组元素中不同绝对值的数量

r - 如何加入具有多列和多个值的 data.table

r - 如何产生混淆矩阵并找到朴素贝叶斯分类器的误分类率?

r - 如何绘制 lm(y~x1+x2) 的 95% 置信区间

R - 基于另一列以差异方式创建新列

performance - 如何强制 PigStorage 输出几个大文件而不是数千个小文件?

sql-server - ASP.NET WebAPI 和 IIS 中的请求计时不一致

java - Tomcat Java Web 应用程序运行缓慢