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

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

numpys張量點的向量化計算

numpys張量點的向量化計算

精慕HU 2023-06-27 18:35:50
我有兩個向量,分別包含形狀(3,3)和形狀張量(3,3,3,3)。這些向量具有相同的長度,我正在計算這兩個向量的逐元素張量點。例如,想要對以下計算進行矢量化以提高性能:a = np.arange(9.).reshape(3,3)b = np.arange(81.).reshape(3,3,3,3)c = np.tensordot(a,b)a_vec = np.asanyarray([a,a])b_vec = np.asanyarray([b,b])    c_vec = np.empty(a_vec.shape)for i in range(c_vec.shape[0]):    c_vec[i, :, :] = np.tensordot(a_vec[i,:,:], b_vec[i,:,:,:,:])print(np.allclose(c_vec[0], c))# True我考慮過使用numpy.einsum但無法找出正確的下標。我嘗試了很多不同的方法,但到目前為止都失敗了:# I am trying something like thisc_vec = np.einsum("ijk, ilmno -> ijo", a_vec, b_vec)print(np.allclose(c_vec[0], c))# False但這并不能重現我上面想要的迭代計算。如果使用 einsum 無法完成此操作,或者有更高效的方法可以完成此操作,我愿意接受任何類型的解決方案。
查看完整描述

2 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

矢量化方式np.einsum是 -

c_vec?=?np.einsum('ijk,ijklm->ilm',a_vec,b_vec)


查看完整回答
反對 回復 2023-06-27
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

tensor_dot有一個axes你也可以使用的參數:

c_vec = np.tensordot(a_vec, b_vec, axes=([1, 2], [1, 2]))


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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