質問: x - y # zを出力 print(z) ``` zを出力すると、以下のようになりますが、この挙動を説明していただけると助かります。 [[ 0 0 0 0 0] [ 5 5 5 5 5] [10 10 10 10 10]]
回答: numpy.ndarray同士の四則演算などは演算子の2つのオペランドの配列の「要素ごとの演算」となります。これはブロードキャスティングの働きによるのですが、2つのオペランドの形は完全に同一でなくても (A)片方がスカラーならもう片方の形に自動拡張してくれる (B)i次元目の長さが異なっていても一方のオペランドの長さが1なら他方の長さに自動拡張してくれる といった規則があります。 本件の場合、演算子`+`のオペランドの形が3×5と1×5なので完全に一致してませんが、(B)のルールにより1×5のオペランドが3×5に拡張されて演算されます。 つまりyは ``` [[0 1 2 3 4]] ==> [[0 1 2 3 4] [0 1 2 3 4] [0 1 2 3 4]] ``` であるかのように拡張して演算してくれるわけです。