[NumPy] 7. ブロードキャスト

matplotlib 3D

NumPyによるブロードキャスト

ブロードキャストとは配列の形状が異なっていても計算を可能とする機能のことである。
ブロードキャストによって、配列の形状を合わせるという面倒な作業が不要になるなどのメリットがある。

1次元配列のブロードキャスト

配列の形状が同じ場合

配列の各要素ごとに計算が行われる。

ボクセルグラフによる視覚化

上記の計算をボクセルグラフで図示すると下記のようになる。

配列の形状が異なる場合

ブロードキャストにより、aの各要素に2が加算される。

ボクセルグラフによる視覚化

上記の計算をボクセルグラフで図示すると下記のようになる。

2次元配列のブロードキャスト

2次元配列に1次元配列をブロードキャスト

np.ones()で3 x 4の要素が1の配列を作成する。
それにa=[0., 1., 2., 3.]を足すと、すべての行に対して、aが足されることになる。

a*cの場合、cのすべての行に対して、aが乗ぜられることになる。

ブロードキャストで2次元配列を生成

dはaの配列の形をnp.newaxisによって(4,1)にしたものとなる
これをa_と足し合わせる。a_の配列の形状は(1,4)であるため、生成する配列の形状は、ブロードキャストされて、(4, 1) × (1, 4) = (4, 4)となる。
ここではわかりやすいようにa_= a[np.newaxis]で次元を増加させているが、aの場合でも計算時に自動的に(4,)から(1,4)と変換されるためブロードキャストができる。

ボクセルグラフによる視覚化

3次元配列のブロードキャスト

ブロードキャストで3次元配列を生成

fはaを3次元化した配列であり、形状は(4, 1, 1)である。これを形状が(1, 4, 4)であるeとブロードキャストで計算することで、(4, 1, 1) × (1, 4, 4) = (4, 4, 4)の配列が生成することになる。

ボクセルグラフによる視覚化

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

NumPyのブロードキャストのメリットと解説
NumPyには演算を行う際に配列の形状(shape)を適切に調整するブロードキャスト(broadcasting)機能が備わっています。本記事では、ブロードキャストについての解説をします。
[matplotlib 3D] 28. Pythonで3D voxelグラフ
3D voxelグラフの作成について解説する。

コメント

  1. […] [NumPyの使い方] 7. ブロードキャストNumPyによるブロードキャストsabopy.com2018.12.11 […]

  2. […] [NumPyの使い方] 7. ブロードキャストNumPyによるブロードキャストsabopy.com2018.12.11 […]