矩阵和 Numpy/Theano 中 3 路张量的乘积


我想计算形状为 (a, b) 的矩阵X和形状为 (a, b, c) 的张量Y的乘积,

使得结果Z具有形状(a, c),而Z的行i (i = 1...a)X的行iY的矩阵切片(i, :, :)的乘积。

有没有一种方便的方法可以在 NumPy 和 Theano 中做到这一点,理想情况下使用内置函数,而不使用循环或计算不必要的矩阵积?

使用您的描述,编写einsum表达式很容易:

In [428]: X=np.arange(6).reshape(2,3)
In [429]: Y=np.arange(2*3*4).reshape(2,3,4)
In [431]: np.einsum('ab,abc->ac',X,Y)
Out[431]: 
array([[ 20,  23,  26,  29],
       [200, 212, 224, 236]])
In [432]: _.shape
Out[432]: (2, 4)

np.matmul@运算符有点棘手,尽管可能一样快:

In [438]: (X[:,None,:]@Y).squeeze()
Out[438]: 
array([[ 20,  23,  26,  29],
       [200, 212, 224, 236]])

中间阶段将是(a,1,c(的形状,即

(a,1,b)@(a,b,c)=>(a,1,c)   # with sum on b

相关内容

  • 没有找到相关文章

最新更新