Простой способ измерения времени выполнения ячейки в IPython notebook
Я хотел бы получить время, затраченное на выполнение ячейки в дополнение к исходному выходу из ячейки.
С этой целью, я пробовал %%timeit -r1 -n1 но он не предоставляет переменную, определенную в ячейке.
%%time работает для ячейки, которая содержит только 1 оператор.
In[1]: %%time
1
CPU times: user 4 µs, sys: 0 ns, total: 4 µs
Wall time: 5.96 µs
Out[1]: 1
In[2]: %%time
# Notice there is no out result in this case.
x = 1
x
CPU times: user 3 µs, sys: 0 ns, total: 3 µs
Wall time: 5.96 µs
какой лучший способ сделать это?
обновление
Я использую время выполнения в Nbextension уже довольно давно. Это отличный.
8 ответов:
используйте cell magic и этот проект на github от Phillip Cloud:
загрузите его, поместив это в верхней части вашего ноутбука или поместите его в файл конфигурации, если вы всегда хотите загрузить его по умолчанию:
%install_ext https://raw.github.com/cpcloud/ipython-autotime/master/autotime.py %load_ext autotimeпри загрузке каждый вывод последующего выполнения ячейки будет включать время в Мин и сек, которое потребовалось для его выполнения.
единственный способ, который я нашел, чтобы преодолеть эту проблему, - это выполнить последний оператор с печатью.
не забывайте, что клетка магия начинается с
%%и линейная магия начинается с%.%%time clf = tree.DecisionTreeRegressor().fit(X_train, y_train) res = clf.predict(X_test) print(res)
%timeи%timeitтеперь приходите часть встроенного ipython магия команды
Я просто добавил
%%timeв начале ячейки и есть время. Вы можете использовать то же самое в кластере Jupyter Spark/ виртуальной среде, используя то же самое. Просто добавьте%%timeв верхней части ячейки, и вы получите на выходе. На кластере spark с помощью Jupyter я добавил в верхнюю часть ячейки, и я получил вывод, как показано ниже: -[1] %%time import pandas as pd from pyspark.ml import Pipeline from pyspark.ml.classification import LogisticRegression import numpy as np .... code .... Output :- CPU times: user 59.8 s, sys: 4.97 s, total: 1min 4s Wall time: 1min 18s
более простой способ-использовать плагин ExecuteTime в пакете jupyter_contrib_nbextensions.
pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user jupyter nbextension enable execute_time/ExecuteTime
это не совсем красиво, но без дополнительного программного обеспечения
class timeit(): from datetime import datetime def __enter__(self): self.tic = self.datetime.now() def __exit__(self, *args, **kwargs): print('runtime: {}'.format(self.datetime.now() - self.tic))затем вы можете запустить его как:
with timeit(): # your code, e.g., print(sum(range(int(1e7)))) % 49999995000000 % runtime: 0:00:00.338492
иногда форматирование отличается в ячейке при использовании
print(res), но jupyter / ipython поставляется сdisplay. См. пример разницы в форматировании с использованием панд ниже.%%time import pandas as pd from IPython.display import display df = pd.DataFrame({"col0":{"a":0,"b":0} ,"col1":{"a":1,"b":1} ,"col2":{"a":2,"b":2} }) #compare the following print(df) display(df)
вы также можете заглянуть в команду профилирования магии python
%prunчто дает что-то вроде -def sum_of_lists(N): total = 0 for i in range(5): L = [j ^ (j >> i) for j in range(N)] total += sum(L) return totalзатем
%prun sum_of_lists(1000000)вернутся
14 function calls in 0.714 seconds Ordered by: internal time ncalls tottime percall cumtime percall filename:lineno(function) 5 0.599 0.120 0.599 0.120 <ipython-input-19>:4(<listcomp>) 5 0.064 0.013 0.064 0.013 {built-in method sum} 1 0.036 0.036 0.699 0.699 <ipython-input-19>:1(sum_of_lists) 1 0.014 0.014 0.714 0.714 <string>:1(<module>) 1 0.000 0.000 0.714 0.714 {built-in method exec}Я считаю это полезным при работе с большими кусками кода.

Comments