Время группировки операций выше, чем сумма времени с Python timeit

Я работаю в ноутбуке Jupyter с ядром Python3.6.

Я начну со следующих определений:

upstream = 10
downstream = 15
ref_pos = 20
positions = range(50)
def in_range(position):
    return ref_pos - upstream <= position <= ref_pos + downstream

Я экспериментирую с различными способами получения элементов из positions которые находятся в (включающем в конец) диапазоне [ref_pos - upstream, ref_pos + downstream], и следующее выглядело многообещающе:

from itertools import groupby
from operator import itemgetter
(_, group) = next(filter(itemgetter(0), groupby(positions, in_range)))
real_positions = list(group)

Действительно, мои другие подходы "одной операции" до сих пор были рассчитаны не менее чем на 6,5 мкс 1, тогда как сроки вышеупомянутого дали отдельно:

%timeit (_, group) = next(filter(itemgetter(0), groupby(positions, in_range)))

Результат:

3.11 µs ± 254 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

А также:

(_, group) = next(filter(itemgetter(0), groupby(positions, in_range)))
%timeit real_positions = list(group)

Результат:

347 ns ± 21.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Поэтому я ожидаю, что весь процесс займет не более 3,5 мкс

Но когда я пытаюсь синхронизировать две операции:

%timeit (_, group) = next(filter(itemgetter(0), groupby(positions, in_range))); real_positions = list(group)

Я получаю следующее:

9.72 µs ± 129 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

Почему я получаю гораздо больше времени, чем когда я суммирую отдельные временные интервалы двух операций?


1 Мои лучшие сроки пока:

from itertools import dropwhile, takewhile
def is_upstream(position):
    return position < ref_pos - upstream
def not_downstream(position):
    return position <= ref_pos + downstream
%timeit real_positions = list(takewhile(not_downstream, dropwhile(is_upstream, positions)))

Результат:

6.7 µs ± 78 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

0 ответов

Другие вопросы по тегам