![](/img/trans.png)
[英]Numpy function not differentiating between dot product and matrix multiplication
[英]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
的行數
m
和v
的形狀分別為 (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 維數組沒有“行”和“列”,一維數組也沒有。
將一維或二維數組相乘的簡單規則是:第一個數組的最后一個軸/維度必須與第二個數組的第一個軸/維度具有相同的大小。
所以你可以乘以:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.