У меня есть отсортированный вектор, скажемR: Получение индексы элементов в отсортированном векторе
v <- c(1, 1, 2, 3, 5, 8, 13, 21, 34)
Теперь я хочу, чтобы найти индекс i
первого элемента, который больше, чем, например a <- 15
.
Я мог бы сделать что-то вроде i <- which(v > a)[1]
.
Но я хочу использовать тот факт, что v
отсортирован, что я не думаю which
заботится о.
Я мог бы написать его сам и разделить интервал рекурсивно пополам и поиск в этих частичных интервалах ...
Есть ли встроенные решения? Как обычно, основной проблемой является скорость, и моя собственная функция будет медленнее.
спасибо.
Ваше решение занимает менее 90 микросекунд на моей машине для вектора 1E4 элементов. Вы уверены, что это недостаточно быстро? – Roland
Хм. Ты прав. 'который (runif (10e6,0,100)> 99,99) [1]' тоже практически не занимает времени. В моем случае у меня есть большой вектор данных. На моей машине требуется 0,015 с миллионным временем. Любопытно, что это не имеет значения, если они отсортированы или нет. 'который' действительно очень хорош. –
Если вы хотите улучшить, вы можете реализовать предлагаемый алгоритм с помощью Rcpp. – Roland