Ndarrayのブロードキャスト計算

 この記事は個人の実行記録Noteです。個人的な経験からPythonの基本を初心の方向けに紹介します。

§ プログラミング >変数と演算 >ブロードキャスト


 Numpy モジュールの配列Ndarray の特徴は、計算処理に長けているところです。 数学的なベクトルや行列の計算を行うに適した演算を提供します。 その中でも、ブロードキャスト(Broadcast) は、多量のデータの一括処理などで威力的なツールとなります。

* 条件を満たすNdarray 配列の演算はブロードキャスト処理される

 Ndarray で構成された配列間の基本的な演算では、同じ配列形状の同位置の要素毎に計算を行います。配列の形状と要素数が一致していないとエラーになるのが原則です。ただし、一定の条件を満たす配列間では、ブロードキャスト処理が自動的に行われます。 

記事:タプル、リスト、Ndarrayの1次元配列での四則演算 表1抜粋

1) Ndarray に対しての1つの数値計算

 演算の相手が1変数の場合には、Ndarray 配列と同じ形式の配列に直してから要素毎の演算を行います。 配列の変更は条件を満たしていれば自動的に行われますが、broadcast_to()メソッドで変更することも可能です。

 broadcast_to()メソッドは、拡張する追加の次元が無い場合または要素数が1つの場合にその値を指定の要素数に拡大展開します。 次元の追加は低い次元側(軸数表示の左側)で起こりますので、従来の軸は軸数列記の高い次元(右側)にシフトしていきます。追加された次元の要素数は1となり、拡大展開の対象となります。 拡大展開する配列の軸の要素数が2以上の軸に対しては、拡大は出来ないので元々の要素数を指定しておきます。

 1次元Ndarray に対して、1つの数値は1次元配列に展開されます。 (  表1の # 1次元Ndarray への1数値加算  # 1変数の場合 )


 2次元配列であれば同じ形式の配列に変換してから演算が行われます。  ( 表1と表2の # 2次元Ndarrayでの加算  # 1変数の場合 ) 

2) 多次元Ndarray の軸に一致する配列との計算

 2次元Ndarray の演算に於いて、縦行列(2次軸に一致)または縦行列(1次軸に一致)の場合ではブロードキャストによって同じ形状の配列に展開されます。 ( 表1と表2の # 2次元Ndarrayでの加算 )

3) 横配列と縦配列間での計算

 横配列と縦配列間の加算は双方を直方行列に直していきます。 ( 表3の # 横配列と縦配列間の加算 )

 

* ブロードキャスト処理の理解

 ブロードキャストがどの様に行われるのか、以下の手順が理解しやすいかもしれない。

1) 配列の要素数を高い次元側(右寄せ)で揃えて比較する
2) 次元が低い配列に要素数1の次元を追加して高い次元数に揃える。
3) 配列の各次元の要素数の最大値からなる配列サイズを決める
4) 配列を最大配列サイズになる様に反復複製して配列の形状をそろえる。
  ※反復複製が出来るのは要素数が1の次元のみ。その他の要素数の場合は複製できないでエラーとなる。
5) 配列の要素毎の演算して罫線結果を得る。


 下表が、3つの多次Ndarrayの演算の場合での配列形状の変化事例(加算)となります。


以上

IG.Python Note

PythonプログラミングのためのTips集です。 趣味のPythonプログラミングをしていると、必要なプログラミング情報を自分で取集することが必要になります。 集めた情報を整理しておくと便利なので、個人的な学習メモとして記録を作りました。

0コメント

  • 1000 / 1000