【Python入門】プログラムの実行時間(経過時間)を測定する方法
プログラムの実行中に経過した時間を測定するには、timeモジュールの関数を利用します。かつてはtime.clock()やtime.time()がよく使われていましたが、clock()はPython 3.8以降で非推奨となり削除されているため、現在は高精度なtime.perf_counter()の使用が推奨されています。
perf_counter() を使った経過時間の測定
まずは基本となるシンプルな計測方法を見てみましょう。
import time
t0 = time.perf_counter()
print("Hello")
t1 = time.perf_counter() - t0
print("Time elapsed: ", t1) # 経過時間(秒・浮動小数点数)
このコードを実行すると、以下のような出力が得られます。
Time elapsed: 1.2999999999999123e-05
perf_counter()はシステム上で最も高精度なパフォーマンスカウンターを利用するため、ごく短い処理時間でも正確に計測できます。処理速度のベンチマークには、この関数を使うのがベストプラクティスとされています。
timeitモジュールによる統計的な計測
より厳密にコード断片の実行時間を分析したい場合には、標準ライブラリのtimeitモジュールが便利です。timeitは対象のコードを複数回実行し、その中で最速だった実行にかかった時間を報告します。一時的なシステム負荷などの外乱の影響を受けにくく、信頼性の高い計測結果を得られます。
使用例
def f(x):
return x * x
import timeit
timeit.repeat("for x in range(100): f(x)", "from __main__ import f", number=100000)
実行すると、繰り返しごとの所要時間(秒)がリスト形式で返されます。
[2.0640320777893066, 2.0876040458679199, 2.0520210266113281]
repeat()はデフォルトで3回の試行を行い、それぞれの平均実行時間をリストとして返します。number引数で1回あたりの実行回数を指定でき、上の例では指定したコードを10万回実行した結果を計測しています。第2引数の"from __main__ import f"は、計測対象の関数をtimeitの環境に渡すためのセットアップコードです。
このように、手軽な計測にはtime.perf_counter()、精度の高いベンチマークにはtimeitモジュールと、目的に応じて使い分けるのがおすすめです。
-
Pythonで時系列データをプロットする方法をわかりやすく解説
Pythonのmatplotlibを使えば、時系列データ(日時を軸にしたデータ)を簡単にグラフ化できます。ここでは、datetimeオブジェクトを含むデータを折れ線グラフとして描画する基本的な手順を紹介します。 時系列プロットの基本手順 numpyを使用して、x軸(日時データ)とy軸(数値データ)を作成します。 plot()メソッドを使って、作成したx・yのデータをプロットします。 show()メソッドを実行して、図を画面に表示します。 コード例 以下のサンプルコードでは、2021年1月1日の0時から23時までの24個の日時データを生成し、それに対応するランダムな数値をy軸としてプロットし
-
Pythonでのベクトル化とは?NumPyによる高速な配列演算の基礎を解説
本記事では、Python 3.xにおける「ベクトル化(Vectorization)」の概念と、その実装に用いられるさまざまなテクニックについて解説します。ループ処理を排除した効率的なコードの書き方を、具体例とともに見ていきましょう。 ベクトル化とは何か? ベクトル化とは、ループを使用せずに配列操作を実装するテクニックです。関数を活用することで、コードの実行時間や計算時間を大幅に短縮できます。 ベクトル化では、配列に対して個別に処理を行うのではなく、ベクトル全体に対して一括で演算を実行します。代表的な演算には以下のようなものがあります。 ドット積(内積・スカラー積):2つのベクトルから単一のス