この計算はaのシェイプ(4,3)の2つめの軸のインデックスの数(この場合3)がbのインデックスの数と一致してる場合に限られる。ないと次のようにエラーになる。この場合、aのシェイプが(3,4,1)ならエラーにならない。計算していることになる。aが(4,1,3)というシェイプの時に、1次元配列bを同じように足し算したいときは、そのままではできなくて、bを(5,1)という形に変形するとできるようになる。計算していることになる。これは一般の次元で考えられるが、その場合の規則は、末尾の側から見ていって1)次元の大きさが一致している場合、または2)片方の次元の大きさが1の場合、についてブロードキャスティング演算ができることになっている。以下の例は本家ページからの抜粋だが、OKなケースとしては以下の例がある。5ダメなケースとしては以下の例がある。最後から2つ目の次元が一致してないこういうのを見ると、2次元配列の掛け算(*)がなぜ行列の意味の掛け算ではなくて要素ごとの掛け算になっているかがわかると思う。それは、ブロードキャスティングの特殊な場合にすぎない。3について計算例を示す。計算することを意味する。ここで、3つ目のインデックスだけが両方で使われていることに注目する。実際の計算は以下の通り。これではぱっと見ではわかりづらいと思うが、3つ目のインデックスだけが重なっていることの影響は以下のように確認できる。c[:,0,0,1]では、すべて一の位と十の位が同じだが、c[0,0,:,1]については一の位と十の位が要素によって異なっている。1つ目のインデックスが変わっても加算されるbの要素は変わらないが、3つ目のインデックスについては、インデックスの値によって加算されるbの要素が変わっていることが確認できる。複雑な仕様に見えたが、実際に手を動かしてみるとさほど難しくないし、自然な仕様にも思えてくる。どこがどう「自然」なのかはまだうまく日本語で説明できない。コメントをキャンセルメールアドレスが公開されることはありません。