【Google Colab】%%timeと%%timeitの使い方と違いを解説
Google Colabには、コードの実行時間を測定できる便利なマジックコマンドとして%%time
と%%timeit
があります。これらを使うことで、コードの実行速度を簡単に把握し、効率化を図ることができます。
この記事では、これら2つのマジックコマンドの違いや具体的な使い方、そしてオプションの設定方法について解説します。
%%timeとは?
%%time
は、特定のコードブロックを1回実行し、その実行時間を計測するマジックコマンドです。主に、処理がどのくらい時間を要するのかを確認したいときに使います。
サンプルコード
以下は、リストに値を追加する処理の実行時間を測定する例です。
|
|
実行結果
CPU times: user 87 ms, sys: 12 ms, total: 99 ms
Wall time: 98 ms
- CPU times: プロセッサが計算に費やした時間
- Wall time: 実際に経過した時間(I/O処理なども含む)
この結果から、リスト作成処理が約98ミリ秒かかったことがわかります。
%%timeitとは?
%%timeit
は、コードブロックを複数回実行して、その平均実行時間と標準偏差を測定するマジックコマンドです。主に、短い処理やアルゴリズムの効率性を比較したいときに使います。
サンプルコード
以下は、リスト内包表記を使ったリスト作成処理の実行時間を測定する例です。
|
|
実行結果
76.8 ms ± 16.5 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
- mean: 平均実行時間(1回の実行にかかった時間)
- std. dev.: 標準偏差(計測値のばらつき)
- 7 runs: 7セットの計測が行われた
- 10 loops each: 各セットで10回ループ実行された
この結果から、リスト内包表記を用いることで1回のリスト作成処理が平均76.8ミリ秒で完了することがわかります。標準偏差16.5ミリ秒は、実行環境や処理内容によるばらつきを示しています。
%%timeと%%timeitの違い
両者の違いを簡単にまとめます。
特徴 | %%time | %%timeit |
---|---|---|
実行回数 | 1回実行 | 複数回実行して平均を出す |
測定内容 | 実行時間(Wall timeとCPU time) | 平均実行時間と標準偏差 |
適用シーン | 長時間処理やI/O操作のあるコード | 短時間処理やアルゴリズムの比較 |
例えば、ファイルの読み書きやネットワーク通信が含まれる処理には%%time
を、計算処理のパフォーマンス比較には%%timeit
を使うと良いでしょう。
%%timeit
のオプション設定
%%timeit
には、実行回数や繰り返し回数を指定するオプションがあります。これらを活用することで、より正確な計測が可能です。
主なオプション
-n
: 1セットあたりのループ回数を指定します。-r
: セットの繰り返し回数を指定します。
オプションの使用例
以下は、-n
と-r
オプションを指定して%%timeit
を実行する例です。
|
|
この例では、1セットあたり100回のループを行い、それを5セット繰り返して計測します。これにより、計測の精度を高めることができます。
他のオプション
%%timeit
にはさらに以下のようなオプションがあります。
-q
(quiet)
実行結果の詳細を非表示にし、必要最低限の情報だけを表示します。例えば、計測結果の数字のみが表示されます。-o
(output)
実行結果をPythonオブジェクトとして取得します。これにより、計測結果をプログラム内で再利用することが可能です。
サンプルコード
|
|
このコードでは、result
オブジェクトに計測結果が格納されるため、プログラム内でさらなる分析が可能です。
使用時の注意点
計測結果のばらつき
実行環境(ハードウェアやバックグラウンドプロセス)により、結果が毎回異なる場合があります。特にGoogle Colabでは、実行するタイミングやセッションによって処理速度が変わる可能性があります。短時間処理の測定精度
短時間の処理では、キャッシュやメモリの影響で測定結果が正確でない場合があります。その場合、-n
や-r
を適切に調整して測定精度を高めましょう。
まとめ
Google Colabの%%time
と%%timeit
を使えば、Pythonコードの実行時間を簡単に測定できます。特に、%%timeit
はオプションを活用することで計測の精度を高めたり、結果を再利用したりすることが可能です。
使い分けのポイント
%%time
: 長時間処理やI/Oを含む処理の測定に最適%%timeit
: 短時間処理やアルゴリズムの比較に最適
%%timeit
のオプションまとめ
-n
: 1セットあたりのループ回数-r
: セットの繰り返し回数-q
: 結果を簡潔に表示-o
: 計測結果をPythonオブジェクトとして取得
これらのツールを活用して、コードの効率化に役立ててください!