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.