1
import numpy as np
mat1 = np.random.rand(2,3)
mat2 = np.random.rand(2,5)
我希望得到一個2x3x5張量,其中每層是3x1轉置行mat1乘以1x5行mat2實現的3x5外層產品。Numpy運營商多個外部產品
它可以用numpy matmul完成嗎?
import numpy as np
mat1 = np.random.rand(2,3)
mat2 = np.random.rand(2,5)
我希望得到一個2x3x5張量,其中每層是3x1轉置行mat1乘以1x5行mat2實現的3x5外層產品。Numpy運營商多個外部產品
它可以用numpy matmul完成嗎?
您可以簡單地使用broadcasting
與np.newaxis/None
延長它們的尺寸之後 -
mat1[...,None]*mat2[:,None]
這將是最高效的,因爲沒有sum-reduction
這裏需要從np.einsum
或np.matmul
保證服務。
如果你仍然想在np.matmul
拖累,這將是作爲與broadcasting
一個基本相同:
np.matmul(mat1[...,None],mat2[:,None])
隨着np.einsum
,它可能看起來更整潔一點比別人,如果你熟悉其字符串符號 -
np.einsum('ij,ik->ijk',mat1,mat2)
# 23,25->235 (to explain einsum's string notation using axes lens)