簡體   English   中英

numpy列和行向量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM