R:获取排序向量中元素的索引

标签 r performance algorithm sorting

假设我有一个排序的向量

v <- c(1, 1, 2, 3, 5, 8, 13, 21, 34) 

现在我想找到索引i大于例如 a <- 15 的第一个元素的.

我可以做类似 i <- which(v > a)[1] 的事情.

但我想利用 v 的事实已排序,我不认为 which关心。

我可以自己写,递归地将区间分成两半,然后在这些部分区间中搜索......

是否有任何内置解决方案?和往常一样,主要问题是速度,我自己的功能肯定会更慢。

谢谢。

最佳答案

对于速度暴食者

a <- 10
v <- sort(runif(1e7,0,1000));
Rcpp::cppFunction('int min_index(NumericVector v, double a) {
                  NumericVector::iterator low=std::lower_bound (v.begin(), v.end(), a);
                  return (low - v.begin());
                  }')
microbenchmark::microbenchmark(which(v > a)[1], min_index(v, a), unit="relative")

#Unit: relative
#            expr      min       lq     mean   median      uq      max neval
#which(v > a)[1] 61299.15 67211.58 14346.42 8797.526 8683.39 11163.27   100
#min_index(v, a)     1.00     1.00     1.00    1.000    1.00     1.00   100

关于R:获取排序向量中元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30026836/

相关文章:

r - 在图的子集之间添加额外的间距

r - 使用 markdown 中的 knitr 后的图表细微变化

java - 提高方法性能java

c - 结构初始化性能

c++ - 高效分组重叠矩形

r - 当 R 中只有一个参数时,为什么逻辑运算符会否定它们的参数?

r - Matlab .Fig 等效于 R

C++:与每次内联输入验证函数相比,对输入验证函数进行编程对性能有多大影响?

python - Python 中日期之间的平均差异

algorithm - 为什么贪心算法找不到图的最大独立集?