[英]Numpy column and row vectors
為什么在numpy
可能將2x2
矩陣乘以1x2
行向量?
import numpy as np
I = np.array([[1.0, 0.0], [0.0, 1.0]])
x = np.array([2.0,3.0])
In: I * x
Out: array([[ 2., 0.], [ 0., 3.]])
轉置x
也沒有任何意義。 行向量保持行向量?
In: x.T
Out: array([ 2., 3.])
從數學的角度來看,表示非常混亂。
numpy數組不是向量。 或者矩陣很重要。 它們是數組。
它們可以用來表示向量,矩陣,張量或任何您想要的東西。 但是,numpy的天才在於表示數組 ,並讓用戶確定其含義。
在數組上定義的一種運算是(按項)乘法。 另外,廣播使您可以通過在缺少的維度上“擴展”它來對不同形狀的數組進行操作,因此,乘法實際上是以下各項的(項)乘法:
[[1.0, 0.0], [0.0, 1.0]] * [[2.0, 2.0], [3.0, 3.0]]
如果要在矩陣意義上使用點積,則應使用.dot
方法,該方法可以做到這一點:將其輸入解釋為向量/矩陣/張量,並進行點積。
如果檢查x
形狀,將看到(2,)表示numpy數組:
In [58]: x.shape
Out[58]: (2,)
如果需要1x2向量,可以使用reshape
:
x_vec = x.reshape(2,1)
In [64]: x_vec.shape
Out[64]: (2, 1)
然后您可以使用numpy dot
方法進行乘法:
In [68]: I.dot(x_vec)
Out[68]:
array([[ 2.],
[ 3.]])
但是dot
也可以不重新塑形:
In [69]: I.dot(x)
Out[69]: array([ 2., 3.])
您也可以使用np.matmul
來做到這一點:
In [73]: np.matmul(I, x_vec)
Out[73]:
array([[ 2.],
[ 3.]])
如果您使用的是Python 3.5,則可以使用@
運算符。
In [2]: I@x
Out[2]: array([ 2., 3.])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.