簡體   English   中英

使用 numpy 點積的向量乘法矩陣

[英]Matrix by Vector multiplication using numpy dot product

我有一個矩陣m = np.array([[3,4], [5,6], [7,5]])和一個向量v = np.array([1,2])這兩個張量可以成倍增加。
對於上述兩個張量的乘法,沒有。 m的列數必須等於 no。 v的行數
mv的形狀分別為 (3,2) 和 (2,)。
如果m有 3 行和 2 列而v有 1 行和 2 列,那么乘法怎么可能?

乘法是可能的,因為v只有一維。 Numpy 將其視為一個向量,因此該向量有 2 個分量,因此允許矩陣向量相乘。

但是,如果您強制v形狀為 1 行和 2 列(所以 2 維),您將收到(預期的)錯誤:

>>> v.reshape(1,2).shape
(1, 2)
>>> np.dot(m, v.reshape(1,2))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<__array_function__ internals>", line 5, in dot
ValueError: shapes (3,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)

為了有一個有效的乘法,你需要v是 2 行和 1 列(所以你需要轉置它):

>>> np.dot(m, v.reshape(1,2).T)
array([[11],
       [17],
       [17]])

你可以看到結果的形狀是(2,1) ,所以是 2 行 1 列。

在 NumPy 中,我建議不要過多考慮“行”和“列”

numpy 中的數組可以有任意數量的維度 - 您可以創建一維、二維或 100 維數組。 100 維數組沒有“行”和“列”,一維數組也沒有。

將一維或二維數組相乘的簡單規則是:第一個數組的最后一個軸/維度必須與第二個數組的第一個軸/維度具有相同的大小。

所以你可以乘以:

  • (3, ) 數組乘 (3, 2) 數組
  • (3, 2) 數組乘 (2, 3) 數組
  • (2, 3) 數組乘 (3, ) 數組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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