web-dev-qa-db-ja.com

ipythonノートブックのセル実行時間を測定する簡単な方法

セルからの元の出力に加えて、セルの実行に費やされた時間を取得したいと思います。

この目的のために、私は%%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 でExecute Timeを使っています。それは素晴らしいです。

115
colinfang

Phillip Cloudのgithubでセルマジックとこのプロジェクトを使用してください。

これをあなたのノートブックの一番上に置くことによってそれをロードするか、もしあなたがいつもデフォルトでそれをロードしたいならばあなたの設定ファイルの中にそれを置いてください:

%install_ext https://raw.github.com/cpcloud/ipython-autotime/master/autotime.py
%load_ext autotime

ロードされている場合、後続のセル実行のすべての出力には、実行に要した分と秒単位の時間が含まれます。

28
Philipp Schwarz

私がこの問題を克服することがわかった唯一の方法は、printを使って最後のステートメントを実行することです。

セルマジックは%%で始まり、ラインマジックは%で始まることを忘れないでください。

%%time
clf = tree.DecisionTreeRegressor().fit(X_train, y_train)
res = clf.predict(X_test)
print(res)

セル内で行われた変更は、次のセルでは考慮されないことに注意してください。これは、パイプラインがある場合には直感的にわかりにくいものです。 an example

318
Salvador Dali

%time%timeitはipythonの組み込み マジックコマンドの一部になりました

46
ryanmc

もっと簡単な方法はjupyter_contrib_nbextensionsパッケージのExecuteTimeプラグインを使うことです。

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
jupyter nbextension enable execute_time/ExecuteTime
13
vForce

私は単にセルの先頭に%%timeを追加して時間を取得しました。 Jupyter Sparkクラスタ/仮想環境でも同じものを使用できます。セルの先頭に%%timeを追加するだけで、出力が得られます。 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
11
Harry_pb

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)

displayステートメントはフォーマットを保存できます。 screenshot

7
blehman

これは正確ではありませんが、追加のソフトウェアなしで

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
6
eafit
import time
start = time.time()
"the code you want to test stays here"
end = time.time()
print(end - start)
2
mina

あなたはpythonのプロファイリングマジックコマンド%prunwhichを見てみたいと思うかもしれません -

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}

大量のコードを扱うときに便利です。

1
markroxor

timeitマジック関数を使うことができます。

%timeit CODE_LINE

またはセル上

%%timeit SOME_CELL_CODE

IPythonのマジック関数については、 https://nbviewer.jupyter.org/github/ipython/ipython/blob/1.x/examples/notebooks/Cell%20Magics.ipynb を参照してください。

1
Mostafa Gazar

問題が発生した場合、何が何を意味するのか:

?%timeitまたは??timeit

詳細を取得するには:

Usage, in line mode:
  %timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] statement
or in cell mode:
  %%timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] setup_code
  code
  code...

Time execution of a Python statement or expression using the timeit
module.  This function can be used both as a line and cell magic:

- In line mode you can time a single-line statement (though multiple
  ones can be chained with using semicolons).

- In cell mode, the statement in the first line is used as setup code
  (executed but not timed) and the body of the cell is timed.  The cell
  body has access to any variables created in the setup code.
0
prosti