2012-03-30 14 views
6

2つのベクトルの要素ごとの乗算は、両方が同じ形状、例えば(n、1)または両方(n、)の両方であれば問題ありません。一方のベクトルがshape(n、1)で他方が(n、)の場合、* -operatorは面白いものを返します。Numpy:shapewise(n、1)と(n、)の2つのベクトルを要素に掛ける方法は?

a = np.ones((3,1)) 
b = np.ones((3,)) 
print a * b 

結果のnxn行列には、A_ {i、j} = a_i * b_jが含まれます。

abの要素ごとの乗算はどうすればできますか?それらの形状の一致を行うように

答えて

15

スライスベクター:

a[:, 0] * b 

又は

a * b[:, None] 
+2

'a.reshapeは(-1)* B'や' *のb.reshape(( - 1 、1)) 'は基本的に同じことをする別の方法です。 ( '-1'は"この形に合うように多くを意味します ") – Dougal

4

そのabに第2の軸を追加しbは、同じ寸法を有する:

>>> a * b[:,np.newaxis] 
array([[ 1.], 
     [ 1.], 
     [ 1.]]) 

また、転位aように放送作品:

>>> a.T * b 
array([[ 1., 1., 1.]]) 

(おそらく結果を移調したいと思います。)

+0

' .T'の解決策は一番いいと思います。それは最小限の入力と最小の思考が必要です。 –

関連する問題