使用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)
我有一个矩阵 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)