使用numpy和GPU在tenor轴上乘以矩阵

Multiplying matrices across tenor axis with numpy and with GPU

我有一个矩阵 X,形状为 (F,T,M)。我希望沿 F 轴乘以每个 (T,M) 矩阵,以便答案的形状为 (M,M,F)。这段代码为我完成了工作,但是这个操作重复了很多次而且速度很慢:

    for f in range(F):
        output[:,:,f] = np.matmul(X[f,:,:].T,X[f,:,:])

我只能找到 np.tensordot() 函数。如果我理解正确,这对我来说不是一个好的选择,因为我需要矩阵乘法而不是点积。

如何使用 numpy 有效地实现它?为此目的使用 keras\tf 是否可能且有益?

我们可以在扩展维度后使用np.matmul/@ opeartor in Python 3.x -

np.matmul(X.swapaxes(1,2),X).swapaxes(0,2)
(X.swapaxes(1,2)@X).swapaxes(0,2)

或者,使用 np.einsum 直接转换用于字符串表示法的形状变量 -

np.einsum('ftm,ftn->mnf',X,X)