Есть ли более быстрый, чем линейный, способ найти конечные точки логического условия в numpy?

Кто-нибудь знает (общий случай) более быстрый, чем линейный, способ найти конечные точки логического свойства массива.

Например, numpy.nonzero(a)[0][-1] — это индекс последнего ненулевого элемента a (размер=0), и аналогично numpy.nonzero(a )[0][0] — это индекс первого ненулевого элемента.

Если мы знаем, что нас интересует только первый или последний элемент, мы можем использовать меньше памяти и иметь лучшее время выполнения общего случая, чем запуск «ненулевого», например выше. Например, если мы придерживаемся линейного поиска, мы можем, по крайней мере, начать с соответствующего конца (искать в обратном направлении, чтобы найти последнее значение, соответствующее условию). Или мы можем использовать бинарный поиск (например, если средний элемент соответствует условию, которое мы не нужно проверить 1-ю половину, чтобы найти последний элемент, где это правда). Это кажется достаточно распространенным явлением, поэтому может существовать существующая реализация, но я не нашел ничего подобного.

5
задан Joseph Hastings 5 March 2012 в 18:17
поделиться