2016-10-26 14 views
0

多角形のすべての矢印に単一の行列をブロードキャストすることになっているので、2つの行列x、yに形状(41)と(41,6) を乗算しようとします。2次元配列に異なる次元を掛ける方法

私はそれをしたい:

x*y 

が、私はこのエラー

ValueError: operands could not be broadcast together with shapes (41,6) (41,) 

が、私はそれを可能にするために、ここで見逃して何があり得ますか?

答えて

1

あなたが達成しようとしていることは確かではありません。あなたの入力と期待される出力の例を挙げることができます。一つの可能​​性はある。

import numpy as np 

x = np.array([[1, 2], [1, 2], [1, 2]]) 
y = np.array([1, 2, 3]) 
res = x * np.transpose(np.array([y,]*2)) 

上記例の結果であるので、これは、YとXの各列を乗算します。

array([[1, 2], 
     [2, 4], 
     [3, 6]]) 
+0

はい、列の周りを矢印の方向に順に転置します。それは役に立ちます。ありがとう – Adam

0

あなたが期待しているものによって異なります。一つの簡単な解決策は次のようになります。あなたの寸法(1,6)の行列を与える必要があります

y*x

0

ディメンションのY(n、m)はに次元のX(n)を乗算したい場合は、このpost

からの回答を検討することにヒントが同様にWikipediaで見つけることができます:

numpy数値ライブラリまたはsympyシンボリックライブラリを持つPythonでは、配列オブジェクトをa1 * a2として掛け合わせるとアダマールが生成されますが、それ以外の場合は、m1 * m2という行列オブジェクトが生成されます。

単純に言えば、配列にスライスしてx * yを実行するか、要件に合わせて他のルートを使用します。

1

放送

すべて与える

  • ステップ2を含みます配列は同じ次元数

  • 拡大1 dimensioあなたの入力を備えた他の配列

と一致するように、NS

(41,6) (41,) 

1は、2D、他の1Dです。放送は1dを(1, 41)に変更できますが、それ以外の方向には自動的には展開されません(41,1)

(41,6) (1,41) 

(41,41)または(6,41)のいずれも一致しません。

だからあなたは要素の掛け算ではなく、np.dot行列積による要素が欲しいことを、私はもちろん、と仮定してい(6,41)

x.T*y 
x*y[:,None] 

にごy(41,1)xに変更する必要があります。