(2)ブロードキャスト
また、Numpyでは異なるサイズの配列に対して加算、乗算などの以降演算を適用するルールが設けられており、それに基づき配列の変換を行うことを
ブロードキャストといいます。
ブロードキャストのルールはNumpy Manualに定義されています
(
https://numpy.org/doc/stable/reference/ufuncs.html Braodcasting)。
ブロードキャストの例1:
>>> a
array([1, 2, 3])
>>> b=5
>>> a+b
array([6, 7, 8])
これは、aが1×3行列、bはスカラーであり配列のサイズが異なります。
そこで、bに次の赤字部分を追加してa+bを計算しています。
\[
\begin{pmatrix}
1 & 2 & 3
\end{pmatrix}
+ 5
\rightarrow
\begin{pmatrix}
1 & 2 & 3
\end{pmatrix}
+
\begin{pmatrix}
5 & \txc{red}{5} & \txc{red}{5}
\end{pmatrix}
\]
ブロードキャストの例2:
>>> a
array([1, 2, 3])
>>> c
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
>>> a+c
array([[2., 3., 4.],
[2., 3., 4.],
[2., 3., 4.]])
これは、aが1×3行列、cは3×3行列であり配列のサイズが異なります。
そこで、aに次の赤字部分を追加してa+cを計算しています。
\[
\begin{pmatrix}
1 & 2 & 3
\end{pmatrix}
+
\begin{pmatrix}
1 & 1 & 1 \\
1 & 1 & 1 \\
1 & 1 & 1
\end{pmatrix}
\rightarrow
\begin{pmatrix}
1 & 2 & 3 \\
\txc{red}{1} & \txc{red}{2} & \txc{red}{3} \\
\txc{red}{1} & \txc{red}{2} & \txc{red}{3}
\end{pmatrix}
+
\begin{pmatrix}
1 & 1 & 1 \\
1 & 1 & 1 \\
1 & 1 & 1
\end{pmatrix}
\]
ブロードキャストの例3:
>>> a2
array([[1],
[2],
[3]])
>>> a2+c
array([[2., 2., 2.],
[3., 3., 3.],
[4., 4., 4.]])
これは、aが3×1行列、cは3×3行列であり配列のサイズが異なります。
そこで、a2に次の赤字部分を追加してa2+cを計算しています。
\[
\begin{pmatrix}
1 \\
2 \\
3
\end{pmatrix}
+
\begin{pmatrix}
1 & 1 & 1 \\
1 & 1 & 1 \\
1 & 1 & 1
\end{pmatrix}
\rightarrow
\begin{pmatrix}
1 & \txc{red}{1} & \txc{red}{1} \\
2 & \txc{red}{2} & \txc{red}{2} \\
3 & \txc{red}{3} & \txc{red}{3}
\end{pmatrix}
+
\begin{pmatrix}
1 & 1 & 1 \\
1 & 1 & 1 \\
1 & 1 & 1
\end{pmatrix}
\]
ブロードキャストの例4:
>>> a
array([1, 2, 3])
>>> d
array([[1., 1.],
[1., 1.],
[1., 1.]])
>>> a+d
Traceback (most recent call last):
・・・
ValueError: operands could not be broadcast together with shapes (3,2) (3,)
2つの配列は、ブロードキャストのルールに基づく変形ができないため、エラーが帰ります。
\[
\begin{pmatrix}
1 & 2 & 3
\end{pmatrix}
+
\begin{pmatrix}
1 & 1 \\
1 & 1 \\
1 & 1
\end{pmatrix}
\rightarrow
?
\]