2017-07-12 8 views
0

私はドットプロダクトを実行しようとしています。最初のパラメータとして転置配列を置くと、本質的にはその合計であるため、正解(1つの値)製品sum(a*b)。しかし、2番目のパラメータとして転置配列を置くと、2x2の配列が得られます。どうして?Numpy - 入力の順序に依存するドットプロダクト

a = np.array([[1],[2]]) 

b = np.array([[3],[4]]) 

np.dot(a,b.T) 
Out[208]: 
array([[3, 4], 
     [6, 8]]) 

np.dot(a.T,b) 
Out[209]: array([[11]]) 

np.dot(b.T, a) 
Out[210]: array([[11]]) 
+0

「ドット」は1D入力の内積のみです。 2D入力の場合は、行列の乗算です。 – user2357112

+0

提供された回答のいずれかがあなたの質問に答えましたか? –

+0

@RyanStout申し訳ありません、仕事に追いつき、私のスタックをチェックしませんでした。 – Kevin

答えて

2

あなたはK行列で1と1つの行列(ベクトル)でKを掛ける場合は、k個の行列でKを取得します。 k行1列の行列にk行1列の行列を乗算すると、1行1列の行列が得られます。

1

np.dotは、複数の配列の内積を計算しません。 2つの行列乗算を計算します。ndarray

ベクトルabの内積は、単にa^T * bあるので、あなたはnp.dotで2つのベクトルの内積を計算することができます。しかし、通常のベクトルの場合と同様に、a^T * bb * a^Tは、2つの非常に異なる答えになります。前者はベクトルの内積を計算し、後者はba^Tの積を計算します。

+0

"ベクトルaとbの内積は単純にa * b^Tです"は真ではありません。ここでの問題のように、aとbが両方とも列ベクトルであるとき、内積は^ T * bです –

+0

ありがとう、私はそこに私の誤植に気付かなかった。 – victor

+1

'numpy'では、ベクトルと転置について話すときには注意が必要です。 1dベクトルの場合、転置は何もしません。 OPには列ベクトル(n、1)があり、そのために '.T 'が違いを出します。 – hpaulj

関連する問題