2016-07-02 8 views
0

このとValueError:オペランド形状と一緒に放送することができませんでした(200,49000)(10,49000)(200,49000)

a=np.zeros((20,4900)) 

b=np.zeros((1,4900)) 

a+=b 
完全に正常に動作し

。しかし、この:

a=np.zeros((200,49000)) 

b=np.zeros((10,49000)) 

a+=b 

はこのエラーを示しています

ValueError: operands could not be broadcast together with shapes (200,49000) (10,49000) (200,49000) 

この理由かもしれませんか?

答えて

3

編集:

numpyのは、自分だけがあれば等しくない寸法の二つの行列を追加し、いずれかの行列AまたはBは、高さが1行である場合にのみます。これを放送といいます。基本線形代数は、両方の行列が同じ次元(加算/減算用)でなければならないので、無効な行列演算を実行しようとしていると言います.Numpyはこれを放送で補正しようとします。

あなたのB行列が代わりにそのように定義されていた場合、あなたの第二の例では場合:

b=np.zeros((1,49000)) 

エラーはないだろう。しかし、これを試した場合:

b=np.zeros((2,49000)) 

同じエラーが発生します。 Numpy docsのケース2は、状況に応じて適用されます。

General Broadcasting Rules

When operating on two arrays, NumPy compares their shapes element-wise. It starts with the trailing dimensions, and works its way forward. Two dimensions are compatible when

1.they are equal, or 
2.one of them is 1 

If these conditions are not met, a ValueError: frames are not aligned exception is thrown, indicating that the arrays have incompatible shapes. The size of the resulting array is the maximum size along each dimension of the input arrays.

+0

申し訳ありませんが、私はちょうど私の質問で修正しました。 2番目の例では、aとbの両方に実際に49000の列があります。 – muglikar

+0

Ito Aが書いているように、例1は行列を行列に追加しています。 Numpyはあなたの可能な意図をaとbの形から自動検出し、aの各列にbを加えます。 –

+1

@muglikar私は自分の答えを編集しました。私はそれがあなたを助けることを願っています – ifma

関連する問題