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

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

numpy.dot 出現意外結果

numpy.dot 出現意外結果

素胚勾勒不出你 2023-08-08 16:40:25
我有兩個矩陣:>>>?a.shape (100,?3,?1) >>>?b.shape (100,?3,?3)我想執行點積,使最終結果為 (100, 3, 1)。但是,目前我收到:>>>?c?=?np.dot(b,?a) >>>?c.shape (100,?3,?100,?1)有人可以解釋發生了什么事嗎?我正在閱讀文檔,但無法弄清楚。編輯:所以根據文檔(忽略它):如果a和b都是2維數組,就是矩陣乘法,但是優先使用matmul或者a@b。這給出了預期的結果,但我仍然很好奇,這里發生了什么?np.dot應用什么函數規則來產生 的結果(100, 3, 100, 1)?
查看完整描述

2 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

這就是 dot 在您的情況下的工作原理:

dot(b, a)[i,j,k,m] = sum(b[i,j,:] * a[k,:,m])

您的輸出形狀正是文檔指定的方式:

(b.shape[0], b.shape[1], a.shape[0], a.shape[2])

如果這不是您所期望的,您可能正在尋找另一個矩陣乘法。


查看完整回答
反對 回復 2023-08-08
?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

dot將返回存儲在數組最后兩個維度中的矩陣的所有可能的乘積。使用matmulaka@運算符廣播主要維度而不是組合它們:

np.matmul(b, a)

或者

b @ a

和積的瑞士軍刀是einsum,所以你也可以使用它:

np.einsum('aij,ajk->aik', b, a)

或者

np.einsum('ajk,aij->aik', a, b)


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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