8章配列の計算:ブロードキャスト

「6章 NumPy配列の計算:ユニバーサル関数」では、NumPyのユニバーサル関数を使用して演算をベクトル化し、動作の遅いPythonループを取り除く方法を学びました。ここではブロードキャストについて説明します。これは、異なるサイズや形状の配列に対して二項演算(加算、減算、乗算など)を適用するための一連のルールです。

8.1 ブロードキャストの基礎

同じサイズの配列の場合、二項演算は要素ごとに実行されます。

In [1]: import numpy as np

In [2]: a = np.array([0, 1, 2])
        b = np.array([5, 5, 5])
        a + b
Out[2]: array([5, 6, 7])

ブロードキャストにより、この二項演算を異なるサイズの配列に対しても実行できます。例えば、スカラー(0次元の配列と考える)と配列の加算が行えます。

In [3]: a + 5
Out[3]: array([5, 6, 7])

これは値5をコピー、もしくは配列[5, 5, 5]に引き伸ばした後、配列aとの加算を行う操作と考えられます。

この手法を高次元の配列にも拡張できます。確認のために、2次元配列と1次元配列の加算を観察してみましょう。

In [4]: M = np.ones((3, 3))
        M
Out[4]: array([[1., 1., 1.],
               [1., 1., 1.],
               [1., 1., 1.]])

In [5]: M + a
Out[5]: array([[1., 2., 3.],
               [1., 2., 3.],
               [1., 2., 3.]])

1次元配列aは、配列Mの形状に一致するよう2番目の次元に沿って引き伸ばされます。すなわちブロードキャストされます。 ...

Get Pythonデータサイエンスハンドブック 第2版 ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.