Pythonで高精度に時間を測定する方法とは?time.clock()とtime.time()の使い方
Pythonで高精度に時間を測定したい場合、time.clock() または time.time() 関数を使用します。特にベンチマーク(処理速度の計測)を目的とする場合は、公式ドキュメントでも time.clock() の使用が推奨されていました。
基本的な使用例
以下は、処理にかかった時間を計測するシンプルなコード例です。
import time
t0 = time.clock()
print("Hello")
t1 = time.clock() - t0
print("Time elapsed: ", t1) # 経過したCPU秒(浮動小数点数)実行結果
このコードを実行すると、次のような出力が得られます。
Time elapsed: 0.0009403145040156798
精度とプラットフォームによる違い
測定精度はシステムの内部クロック設定(1秒あたりのティック数)によって異なりますが、一般的には20ミリ秒未満の精度が期待できます。
また、time.clock() の戻り値はプラットフォームによって意味が異なる点に注意が必要です。
- Unix系OSの場合: 現在のプロセッサ時間を浮動小数点数(秒単位)として返します。精度や「プロセッサ時間」の厳密な定義は、同名のC言語関数に依存しますが、いずれの場合もPythonコードのベンチマークやアルゴリズムの計測にはこの関数が適しています。
- Windowsの場合: この関数を最初に呼び出してからの経過時間(実時間:ウォールクロック秒)を浮動小数点数で返します。内部ではWin32 APIの
QueryPerformanceCounter()を使用しており、分解能は通常1マイクロ秒より高い精度を持ちます。
注意:最新のPythonでは time.perf_counter() を使おう
time.clock() はPython 3.3で非推奨となり、Python 3.8で削除されました。現在のPythonで高精度な時間計測を行う場合は、プラットフォーム間の差異がなく、最も高い分解能を持つ time.perf_counter() を使用するのがベストプラクティスです。
import time
t0 = time.perf_counter()
print("Hello")
elapsed = time.perf_counter() - t0
print(f"Time elapsed: {elapsed:.9f} seconds")time.perf_counter() は単調増加が保証された高解像度クロックであり、ベンチマーク用途に最適です。単純に現在時刻を取得したい場合のみ time.time() を使用しましょう。
-
PythonのBokehで画像を操作・表示する方法
Pythonの可視化ライブラリBokehで画像を扱うには、image_url()メソッドを使い、画像URLのリストを渡すのが基本です。このメソッドを使うことで、ローカルやWeb上にある画像をプロット領域内に簡単に配置できます。実装の手順output_file()でデフォルトの出力先を設定し、show()を呼び出したときに結果がHTMLファイルとして保存されるようにします。figure()でプロット用の新しいFigure(図)オブジェクトを作成します。image_url()メソッドで、指定したURLから読み込んだ画像を描画します。show()を呼び出して、Bokehオブジェクトやアプリケーション
-
Pythonで時系列データをプロットする方法をわかりやすく解説
Pythonのmatplotlibを使えば、時系列データ(日時を軸にしたデータ)を簡単にグラフ化できます。ここでは、datetimeオブジェクトを含むデータを折れ線グラフとして描画する基本的な手順を紹介します。 時系列プロットの基本手順 numpyを使用して、x軸(日時データ)とy軸(数値データ)を作成します。 plot()メソッドを使って、作成したx・yのデータをプロットします。 show()メソッドを実行して、図を画面に表示します。 コード例 以下のサンプルコードでは、2021年1月1日の0時から23時までの24個の日時データを生成し、それに対応するランダムな数値をy軸としてプロットし