へっぽこエンジニア@機械学習

へっぽこなエンジニアがへっぽこなりに機械学習の習得に取り組む過程で得た知識について書いたブログです。実装に際してハマった点や、基礎的な内容についての記載が中心ですが、徐々に高度化させて行ければと思っています。非へっぽこの方からは間違いの指摘など頂ければ嬉しいです。

ブロードキャストを活用して1次元のndarrayと2次元以上のndarrayの演算する際の注意点

ブロードキャストとは、pythonの機能で行数、列数が異なる配列同士を上手に補完して演算してくれるものである。

例えば、以下の様なarrayを用意する。

f:id:growingEngineer:20190314085203p:plain

a,bは行数は同じだが列数が異なる。

こう行った際にa-bを行うと、以下の様な結果が得られる。

f:id:growingEngineer:20190314085403p:plain

この様に本来(5,1)のサイズであるbが、あたかも(5,5)の様に振舞って四則演算をしてくれる機能こそがブロードキャスト。

 

初心者の自分が引っかかったのが以下の様なケース。

cは一見bと同じに見えるが、それぞれサイズが異なりb(5,1), c(5,)である。

f:id:growingEngineer:20190314085712p:plain

このままa-cを実行するとブロードキャストは適用されずエラーを返される。

f:id:growingEngineer:20190314085935p:plain

aとbは2次元配列なのに対して、cは1次元配列の為ブロードキャストが適用されない。

次元の違いは以下の様に確認できる。

f:id:growingEngineer:20190314090257p:plain

a-cを計算したい時には、以下の様にcをreshapeし2次元配列にしてやれば良い。

f:id:growingEngineer:20190314090609p:plain

なお、上の例では演算時のみreshapeをしており元のcには変更が加わっていない事が分かる。