Почему цикл Python рассчитывается внутри быстрее, чем цикл снаружи?

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

Я использую глобальную переменную Node.sstats для хранения совокупного времени, т.е. на каждой итерации увеличивается переменная, хранящая общее время.

Я упростил свой код, но не верю, что это меняет проблему. Я измеряю время цикла (t3-t2), а также общее время внутри цикла (t5-t4). Время для t3 - t2 в 10 раз больше, чем для t5 - t4. Следовательно, время цикла намного больше, чем совокупное время содержимого цикла. Я также проверил, и время обновления глобальной переменной Node.ksstats (t5b-t5) не имеет значения по сравнению с общим временем цикла (<1%). Так является ли сам механизм зацикливания причиной или он имеет какое-то отношение к доступу к памяти?

Вот мой код

t2 = time.time()
for a in range(0, d):
    t4 = time.time()
    
    t6 = time.time()
    kurt[a], moments[a] = ik.incr_kurtosis(X[:,a], moments[a])
    t7 = time.time()
      
    Node.ksstats[2] += (t7- t6)
    kurt[a] = log(kurt[a] + 1)
    summ += kurt[a]
   
    # measure the cumulative time of the loop contents         
    t5 = time.time()
    Node.ksstats[3] += (t5-t4)
    # measure cumulative time to update ksstats variable

    t5b= time.time()
    Node.ksstats[5] += (t5b-t5)

# time entire for loop
t3 = time.time()
Node.ksstats[4] += (t3 - t2)

ОБНОВИТЬ

Я все еще не уверен, что происходит, но я уравнял внутреннее и внешнее время цикла, обновив локальную переменную ksstats внутри цикла вместо переменной класса, Node.ksstats

Лучше использовать инструменты профилирования Pylton docs.python.org/3/library/profile.html вместо того, чтобы пытаться свернуть свои собственные.

BoarGules 01.04.2021 11:51

Мне известны инструменты профилирования, но я до сих пор не понимаю лежащего в основе механизма, вызывающего это

Stefan N 01.04.2021 11:54

Можете ли вы попробовать time.monotonic() вместо time.time(), чтобы посмотреть, изменится ли что-нибудь?

mmrbulbul 01.04.2021 12:41

для меня это ничего не меняет.

Stefan N 03.04.2021 01:23

Неужели d около 10 случайно?

donkopotamus 03.04.2021 01:34

Нет d зависит от набора данных (количества измерений) и составляет 166 в наиболее проблемном примере.

Stefan N 04.04.2021 23:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
55
0

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