# 【Google Colab】%%timeと%%timeitの使い方と違いを解説
> Google Colabには、コードの実行時間を測定できる便利なマジックコマンドとして`%%time`と`%%timeit`があります。これらを使うことで、コードの実行速度を簡単に把握し、効率化を図ることができます。
- Canonical: https://c-a-p-engineer.github.io/google-colab-measure-time-timeit-usage/
- Published: 2024-12-28T09:30:00.000Z
- Modified: 2024-12-28T09:30:00.000Z
- Categories: Python
- Tags: Python

Google Colabには、コードの実行時間を測定できる便利なマジックコマンドとして`%%time`と`%%timeit`があります。これらを使うことで、コードの実行速度を簡単に把握し、効率化を図ることができます。

この記事では、これら2つのマジックコマンドの違いや具体的な使い方、そしてオプションの設定方法について解説します。

---

## %%timeとは？

`%%time`は、特定のコードブロックを1回実行し、その実行時間を計測するマジックコマンドです。主に、処理がどのくらい時間を要するのかを確認したいときに使います。

### サンプルコード

以下は、リストに値を追加する処理の実行時間を測定する例です。

```python
%%time
# リストに1から100万までの数字を追加する処理
large_list = []
for i in range(1, 1000001):  # 1から100万までループ
    large_list.append(i)     # リストに値を追加
```

### 実行結果

```
CPU times: user 87 ms, sys: 12 ms, total: 99 ms
Wall time: 98 ms
```

- **CPU times**: プロセッサが計算に費やした時間
- **Wall time**: 実際に経過した時間（I/O処理なども含む）

この結果から、リスト作成処理が約98ミリ秒かかったことがわかります。

---

## %%timeitとは？

`%%timeit`は、コードブロックを複数回実行して、その平均実行時間と標準偏差を測定するマジックコマンドです。主に、短い処理やアルゴリズムの効率性を比較したいときに使います。

### サンプルコード

以下は、リスト内包表記を使ったリスト作成処理の実行時間を測定する例です。

```python
%%timeit
# リスト内包表記を使って1から100万までのリストを作成
large_list = [i for i in range(1, 1000001)]  # 1から100万までの値を一括でリスト化
```

### 実行結果

```
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`を実行する例です。

```python
%%timeit -n 100 -r 5
# リスト内包表記を使って1から100万までのリストを作成
large_list = [i for i in range(1, 1000001)]
```

この例では、1セットあたり100回のループを行い、それを5セット繰り返して計測します。これにより、計測の精度を高めることができます。

---

### 他のオプション

`%%timeit`にはさらに以下のようなオプションがあります。

- **`-q` (quiet)**
  実行結果の詳細を非表示にし、必要最低限の情報だけを表示します。例えば、計測結果の数字のみが表示されます。

- **`-o` (output)**
  実行結果をPythonオブジェクトとして取得します。これにより、計測結果をプログラム内で再利用することが可能です。

#### サンプルコード
```python
result = %timeit -o -n 10 [i**2 for i in range(1000)]  # 平方数のリスト作成を計測
print("平均実行時間:", result.average)  # 平均実行時間を取得
print("標準偏差:", result.stdev)       # 標準偏差を取得
```

このコードでは、`result`オブジェクトに計測結果が格納されるため、プログラム内でさらなる分析が可能です。

---

## 使用時の注意点

- **計測結果のばらつき**
  実行環境（ハードウェアやバックグラウンドプロセス）により、結果が毎回異なる場合があります。特にGoogle Colabでは、実行するタイミングやセッションによって処理速度が変わる可能性があります。

- **短時間処理の測定精度**
  短時間の処理では、キャッシュやメモリの影響で測定結果が正確でない場合があります。その場合、`-n`や`-r`を適切に調整して測定精度を高めましょう。

---

## まとめ

Google Colabの`%%time`と`%%timeit`を使えば、Pythonコードの実行時間を簡単に測定できます。特に、`%%timeit`はオプションを活用することで計測の精度を高めたり、結果を再利用したりすることが可能です。

### 使い分けのポイント
- **`%%time`**: 長時間処理やI/Oを含む処理の測定に最適
- **`%%timeit`**: 短時間処理やアルゴリズムの比較に最適

### `%%timeit`のオプションまとめ
- `-n`: 1セットあたりのループ回数
- `-r`: セットの繰り返し回数
- `-q`: 結果を簡潔に表示
- `-o`: 計測結果をPythonオブジェクトとして取得

これらのツールを活用して、コードの効率化に役立ててください！
