假设我有一个排序的向量
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/