簡體   English   中英

將矩陣的每個向量乘以 3d 張量的每個矩陣

[英]Multiply each vector of matrix by each matrix of 3d tensor

我有兩個張量m1.shape = [a, b, b]m2.shape = [a, b] 我想要做的是使用循環以這種方式完成:

ret = np.zeros_like(m2)
for idx, (m1_sub, m2_sub) in enumerate(zip(m1, m2)):
    ret[idx] += m2_sub @ m1_sub

換句話說,將向量m2[i]乘以m1[i]並將結果存儲在大小為[a, b]的矩陣中。 有沒有什么簡單的方法可以通過使用 numpy 內置函數並避免循環來實現這一點?

給定m1m2具有各自的形狀(a,b,b)(a,b)你正在這樣做

a = 10
b = 5

m1 = np.random.randn(a,b,b)
m2 = np.random.randn(a,b)

ret = np.zeros_like(m2)

for i in range(a):
    ret[i] += (m2[i,:] * m1[i,:,:].T).sum(axis=1)

這與

(m2[...,None] * m1).sum(1)

這可以用einsum等價表示

np.einsum("ij,ijk->ik", m2, m1)

m1中的第一個軸( i下標)與m2中的第一個軸相乘。

第二個軸正在根據sum(axis=1)減少,這是因為我們省略了 einsum 方程的 output 中的j下標。

m2中沒有第三個軸,因此它針對m1中的第三個軸( k下標)進行廣播。

暫無
暫無

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

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