Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのtimeitモジュールで小さなコードの実行時間を測定する方法

Python標準ライブラリのtimeitモジュールには、Timerクラスや便利な関数が用意されており、小さなPythonコードの断片が実行されるのにかかる時間を測定するための仕組みを提供しています。このモジュールはコマンドラインインターフェースも備えており、プログラム内から関数を呼び出して使うことも可能です。

実行時間を測定する最も簡単な方法は、次の便利な関数を使うことです。

timeit()関数

timeit()関数はTimerクラスのオブジェクトを返します。主に以下の2つのパラメータを指定します。

  • stmt ― 実行時間を測定したい有効なPythonステートメントを含む文字列。
  • setup ― 主に特定のオブジェクトや変数を初期化するために、最初に一度だけ実行されるPythonステートメントを含む文字列。

どちらの文字列にも、セミコロン(;)や改行で区切った複数のステートメントを記述できます。省略した場合のデフォルト値はどちらも pass キーワードです。また、オプションのパラメータ number を指定すると、「stmt」の実行回数を設定できます。

次の例では、0〜100の範囲の数値を累積加算する処理を1000回実行するのにかかる時間を測定しています。

import timeit
setupcode = "s = 0"
function = '''
for x in range(100):
    s = s + x
'''
print(timeit.timeit(setup=setupcode, stmt=function, number=1000))

ここでは、0〜100の範囲の数値を加算するforループを含む文字列が stmt パラメータとして渡されています。加算に使用する変数の初期化は、setupcode の文字列によって行われます。timeit()関数は、処理にかかった時間を秒単位で返します。

出力結果:

0.03055878530880241

Timerクラス

同じ結果は、まずTimerオブジェクトを作成し、そのtimeit()メソッドを実行することでも得られます。

repeat()メソッド

Timerクラスには、timeit()を繰り返し呼び出すための repeat() メソッドも用意されています。このメソッドは、各呼び出しの結果をリストとして返します。

先ほどのコードをオブジェクト指向のスタイルで書き直すと、以下のようになります。

import timeit
setupcode = "s = 0"
function = '''
for x in range(100):
    s = s + x
'''
t = timeit.Timer(setup=setupcode, stmt=function)
print(t.timeit(number=1000))
print('calling repeat() :', t.repeat(3, 1000))

出力結果:

0.019971274194651528
calling repeat() : [0.023369810546474253, 0.020518432391765262, 0.02075439436427058]

コマンドラインインターフェース

前述のとおり、timeitモジュールにはコマンドラインインターフェースも用意されています。Pythonスクリプトを実行する際に、コマンドラインで -m オプションを使ってモジュールを直接インポートして実行します。以下のコマンドラインオプションで、セットアップ文や実行コード、繰り返し回数などの各種パラメータを指定できます。

-n N, --number=N「statement」を実行する回数
-r N, --repeat=Nタイマーを繰り返す回数(デフォルトは3)
-s S, --setup=S最初に一度だけ実行されるステートメント(デフォルトは pass)
-v, --verbose生の計測結果を出力する。繰り返し指定するとより高い精度の桁数が得られる
-h, --help短い使用方法のメッセージを表示して終了する

以下は、先ほどのサンプルコードと同じ処理をコマンドラインから実行した例です。

C:\Users\acer>python -m timeit -s "s = 0" "for x in range(100): s = s + x"
10000 loops, best of 3: 22.4 usec per loop
  1. Pythonインタープリターとは?仕組みと初心者向けオンライン環境を徹底解説

    Pythonは学びやすいプログラミング言語として知られています。その理由のひとつが、自分のマシンに正しいバージョンのPythonをインストールしなくても、オンラインで利用できるPythonインタープリターが数多く存在する点です。本記事では、Pythonインタープリターの仕組みについて解説し、初心者にも使いやすい人気のオンラインインタープリターをご紹介します。 Pythonプログラムはどのように実行されるのか? PythonはJavaと同様に、純粋なインタプリタ言語ともコンパイラ言語とも分類できず、両方の性質を併せ持っています。 ここでいう「コンパイル」とは、特定のプラットフォームに依存し

  2. Pythonでのベクトル化とは?NumPyによる高速な配列演算の基礎を解説

    本記事では、Python 3.xにおける「ベクトル化(Vectorization)」の概念と、その実装に用いられるさまざまなテクニックについて解説します。ループ処理を排除した効率的なコードの書き方を、具体例とともに見ていきましょう。 ベクトル化とは何か? ベクトル化とは、ループを使用せずに配列操作を実装するテクニックです。関数を活用することで、コードの実行時間や計算時間を大幅に短縮できます。 ベクトル化では、配列に対して個別に処理を行うのではなく、ベクトル全体に対して一括で演算を実行します。代表的な演算には以下のようなものがあります。 ドット積(内積・スカラー積):2つのベクトルから単一のス