60

IPython の %timeit マジック コマンドは、一部の Python コードの実行に必要な時間を測定するのに適しています。ここで、Python スクリプトで類似のものを使用したいと考えています。timeit モジュールについては知っていますが、実行回数を適応的に選択する方法など、いくつかの欠点がありますか? つまり、デフォルトのコード

import timeit
t=timeit.Timer("code(f)", "from __main__ import code,f")
t.timeit() 

コードを何百万回も実行します。%timeit IPyhton マジック コマンドは、これを自動的に行います。MATLAB コード http://www.mathworks.com/matlabcentral/fileexchange/18798のようなものを使用できることをお勧めします

これにより、すべてのジョブが自動的に実行されます (また、関数のオーバーヘッドが大きいかどうかも通知されます)。

Python スクリプトから %timeit マジックを呼び出すにはどうすればよいですか (または、より良いタイミング ソリューションがあるかもしれません)。

4

5 に答える 5

7

で呼び出されると、 IPython とtimeitモジュールの両方が、時間測定がオペレーティング システムの干渉からほとんど解放されることを保証する特定のしきい値をタイミング結果が超えるまで、numberpython -m timeitの値を増やして同じループを実行します。

魔法のIPython 実装を%timeitPython標準timeitモジュールと比較すると、ほとんど同じことを行っていることがわかります。

したがって、あなたの質問に答えると、数値パラメーターの正しい値が見つかるまで、おそらく同じループを繰り返す必要があります。

于 2012-04-28T10:05:50.850 に答える
3

以下は、Python スクリプトを IPython で対話的に実行する場合に機能します。例test.py:

def f():
    # Algorithm 1
    pass

def g():
    # Algorithm 2
    pass

# which one is faster?
mgc = get_ipython().magic
mgc(u'%timeit f()')
mgc(u'%timeit g()')

次に、IPython でインタラクティブに実行します

%run -i test.py

タイミングを吐き出す。変数がスコープ内にあるようにするには、-iスイッチが必要です。IPython インスタンスを実行せずにこれを行う方法、つまり単にtimeitIPython からインポートして関数として使用する方法がわかりませんでした。ただし、このソリューションは、いくつかのタイミング実行を自動化するという私の目的のために機能します。

于 2013-11-01T21:43:22.940 に答える