[英]Numpy/Tensorflow: Multiplying each depth-wise vector of 3D tensor by a 2D matrix
[英]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 內置函數並避免循環來實現這一點?
給定m1
和m2
具有各自的形狀(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.