-1

次の次元の2つの配列の除算でNumpy Operands could not be broadcast together with shape (200,1,25,25) (200,1) エラーが発生します

a=numpy.ones((200,1,25,25))
b=numpy.ones((200,1))
c=a/b

しかし、次の次元で正しい結果を得ることができます

a=numpy.ones((4,1,4,4))
b=numpy.ones((4,1))
c=a/b

エラーを修正するにはどうすればよいですか。私のnumpyのバージョンは1.6.1です。Python のバージョンは 2.7 です。

4

1 に答える 1

3

2番目の例は、あなたが思っていることをしません。Numpy は、ブロードキャストの軸を右から一致させます。(25, 25)最初の例では と一致し(200, 1)、ブロードキャストに失敗しますが、と(4, 4)一致し、(4, 1)正常にブロードキャストされます。

(200, 1, 25, 25)形状配列は、25 行 25 列の 200 行 1 列の配列と考えてください。これを 25 行 25 列の配列で除算すると、numpy は左オペランドの 25 行 25 列のサブ配列ごとに右オペランドで除算します。一方、これを 200 行 1 列の除数で試しても意味がありません。これは、ブロードキャスト ルールの完全な説明ではありません。2 番目の例は、これがすべてである場合は実行されませんでした。

軸の順序を逆にしたい場合があります:

a = numpy.ones((25, 25, 1, 200))
b = numpy.ones((1, 200))

ブロードキャスト セマンティクスのドキュメントを読むこともおそらく役立つでしょう。

于 2013-09-02T07:06:58.973 に答える