web-dev-qa-db-ja.com

Jupyter Notebookコードセルの実行時間を測定する

Spyder(IPython3カーネル)では、コードセルの上部にある_%%time_または_%%timeit_コマンドを実行することで、コードセルのタイミングを簡単に設定できるようです。

_#%%
%%time # or %%timeit which measures average runtime from multiple runs
....

#%% (the previous cell ends and the next begins)
_

上記のコードを実行すると、_#%%_のペアで定義されたセルのランタイムを取得できます。これはSpyderで機能する方法ですが、Jupyter Notebook環境ではまったく機能しません。

Jupyterでは、セルは_#%%_区切り文字ではなく、メニューバーのボタンをクリックして作成されます。そして、私が試した限りでは、コマンド_%%time_および_%%timeit_はどちらもコンパイルエラーを発生させます。 Jupyterがそれらを認識できないようですが、私のJupyterは実際にはSpyderと同じIPythonカーネルを使用しているため、奇妙です。 Jupyterで機能するものの1つは_%time_および_%timeit_コマンドですが、これらは1行のコードの実行時間しか測定できません。つまり、次のように定式化する必要があります。

_%time blah blah
_

そして、複数の行で構成されるforループを測定することさえできないことがわかりました。したがって、この方法は私には望ましくありません。 Jupyterでマジックコマンド%time(it)などを使用してセルランタイムを評価する方法はありますか?

(追記:Spyderのように、セルの上部に_%time_コマンドを付けると、_Wall time: 0 ns_が続きますその同じ行にそして実際には何も測定しません。)

5
Vim

時間情報の使い方によって異なります...

自分の知識のためにセルの実行にかかった時間だけを知りたい場合は、ExecuteTimeノートブック拡張機能( https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tree/7672d429957aaefe9f2e71b15e3b78ebb9ba96d1/src/jupyter_contrib_nb nbextensions/execute_time )は、すべてのコードセルの時間情報を自動的に提供するため、ニースのソリューションです。つまり、場所全体にタイミングコードを追加する必要がないため、コードのメンテナンスが軽減されます。また、ノートブックを科学的なログブックとして使用している場合に役立つ、最後に実行された日付スタンプも書き込みます。

ただし、時間情報をプログラムで使用する場合は、時間情報を変数に取り込むコードを追加する必要があります。この回答( コードブロックの実行時間をPython 2.7 で取得))に従って、timeitモジュールを使用できます。

import timeit
start_time = timeit.default_timer()
# code you want to evaluate
elapsed = timeit.default_timer() - start_time

明らかに、これはセルマジックを使用する場合ほどきれいではありませんが、作業を完了する必要があります。

どのように/あなたがセルマジックを使用して後者を達成できるかについては、私は知りません。

8
Biggsy

コメントの前であっても、セルの最初に%% timeを入れてください。これでうまくいきました。