線形代数では真実ではありません、我々はすべてのケースで同じ結果を取得するには、次の例、を見て、(の理論的な感覚):その情報に基づいて
In [37]: w
Out[37]: array([0, 1, 2, 3, 4])
In [38]: x
Out[38]: array([1, 2, 3, 4, 5])
In [39]: np.dot(w, x)
Out[39]: 40
In [40]: np.dot(w.transpose(), x)
Out[40]: 40
In [41]: np.dot(w.transpose(), x.transpose())
Out[41]: 40
In [42]: np.dot(w, x.transpose())
Out[42]: 40
、今度はベクトル|w|^2
の2乗の長さを計算しようとします。
このため、w
を2D配列に変換する必要があります。
In [51]: wt = w[:, np.newaxis]
In [52]: wt
Out[52]:
array([[0],
[1],
[2],
[3],
[4]])
さて、ベクトルw
の二乗長さ(または乗大きさ)を計算してみましょう:
In [53]: np.dot(w, wt)
Out[53]: array([30])
私たちが代わりにwt
のw
、wt
を使用注意、w
(理論的な線形代数のように) np.dot(wt、w)の使用による形状の不一致が原因です。したがって、ベクトルの2乗の長さは[30]
です。たぶんこれは行と列のベクトル(numpyの解釈)を区別する方法の1つですか?
最後に、私は実装する方法を考え出したと言いましたw^T * x
?はい、私がやった:私たちは、理論的線形代数で研究に反し、上記の証明されたように
In [58]: wt
Out[58]:
array([[0],
[1],
[2],
[3],
[4]])
In [59]: x
Out[59]: array([1, 2, 3, 4, 5])
In [60]: np.dot(x, wt)
Out[60]: array([40])
だから、numpyの中で、オペランドの順序は、逆転されます。
P.S.:potential gotchas in numpy
をあなたが観察している行動は、現実の世界では」実際に*正しい*です":a * one *次元の数列は行でも列ベクトルでもありません。行ベクトルまたは列ベクトルは実際には* 2次元の配列(2次元の1つが1)です。したがって、代わりに 'array([[1、2、3]])'でテストしなければなりません。これはその転置と同じではありません。 – EOL
これは実際には数学的にはあまり正しくありません。行列はmxnであり、行ベクトルは定義上、m = 1であり、列ベクトルはn = 1である行列である。次元数は数学ではまったく異なり、ベクトル空間のベーシスセットに含まれるベクトルの数に関係しているので、実際には単一のベクトルの次元性については話してはいけません。私は、「現実の世界」を話す際の元のポスターは、線形代数と数学の世界について話していたと思います。プログラマーは間違った用語を使用する傾向があります。 – neuronet