亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當涉及到 numpy 中兩個不同維度的數組時,點積和乘法矩陣是否相同

當涉及到 numpy 中兩個不同維度的數組時,點積和乘法矩陣是否相同

POPMUISE 2023-09-26 17:26:50
我在計算兩個向量的點積時觀察到了奇怪的輸出。我的代碼是a1 = np.array([[1], [2], [3]])a2 = np.array([[1, 2, 3]]) print(a1*a2)print(np.dot(a1, a2))兩者的輸出相同,我不明白為什么它在要求點時將兩個矩陣相乘產品。對于形狀為 (x, 1) 和 (1, y) 的任何矩陣,都會觀察到同樣的情況。謝謝
查看完整描述

2 回答

?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

在 numpy 中,dot并不真正意味著點積。dot本質上類似于矩陣乘法。因此,有人可能會說它既多余又令人困惑,這就是為什么我自己根本不使用它。


要獲得您似乎想要的行為,您可以使用vdot:


>>> np.vdot(a1,a2)

14

>>> np.vdot(a2,a1)

14


查看完整回答
反對 回復 2023-09-26
?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

In [189]: a1 = np.array([[1], [2], [3]])

     ...: a2 = np.array([[1, 2, 3, 4]])

In [190]: 

In [190]: a1.shape, a2.shape

Out[190]: ((3, 1), (1, 4))

矩陣乘法:


In [191]: a1@a2                # np.matmul

Out[191]: 

array([[ 1,  2,  3,  4],

       [ 2,  4,  6,  8],

       [ 3,  6,  9, 12]])

廣播元素乘法:


In [192]: a1*a2

Out[192]: 

array([[ 1,  2,  3,  4],

       [ 2,  4,  6,  8],

       [ 3,  6,  9, 12]])

(3,1) 與 (1,4) => (3,4) 與 (3,4) => (3,4)


調整 Size 1 維度以匹配其他數組


與matmul:


In [193]: a1.dot(a2)

Out[193]: 

array([[ 1,  2,  3,  4],

       [ 2,  4,  6,  8],

       [ 3,  6,  9, 12]])

形狀不匹配:


In [194]: a2.dot(a1)

Traceback (most recent call last):

  File "<ipython-input-194-4e2276e15f5f>", line 1, in <module>

    a2.dot(a1)

ValueError: shapes (1,4) and (3,1) not aligned: 4 (dim 1) != 3 (dim 0)

用愛因斯坦符號:


In [195]: np.einsum('ij,jk->ik',a1,a2)

Out[195]: 

array([[ 1,  2,  3,  4],

       [ 2,  4,  6,  8],

       [ 3,  6,  9, 12]])

在真正的矩陣乘法中,這會將所有行乘以所有列,并在共享維度上求和。因為j維度為 1,所以求和沒有什么區別。


我們可以看到廣播的效果:


In [198]: np.broadcast_arrays(a1,a2)

Out[198]: 

[array([[1, 1, 1, 1],

        [2, 2, 2, 2],

        [3, 3, 3, 3]]),

 array([[1, 2, 3, 4],

        [1, 2, 3, 4],

        [1, 2, 3, 4]])]


查看完整回答
反對 回復 2023-09-26
  • 2 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號