我正在尝试将一些代码从 MATLAB 移植到 Python,但 Python 的性能却慢得多。我不太擅长 Python 编码,因此任何加快这些速度的建议将不胜感激。
我尝试了einsum单行(在我的机器上需要7.5 秒):
import numpy as np
n = 4
N = 200
M = 100
X = 0.1*np.random.rand(M, n, N)
w = 0.1*np.random.rand(M, N, 1)
G = np.einsum('ijk,iljm,lmn->il', w, np.exp(np.einsum('ijk,ljn->ilkn',X,X)), w)
Run Code Online (Sandbox Code Playgroud)
我也尝试了一个matmult实现(在我的机器上需要6 秒)
G = np.zeros((M, M))
for i in range(M):
G[:, i] = np.squeeze(w[i,...].T @ (np.exp(X[i, :, :].T @ X) @ w))
Run Code Online (Sandbox Code Playgroud)
但我原来的 MATLAB 代码要快得多(在我的机器上需要1 秒)
n = 4;
N = 200;
M …Run Code Online (Sandbox Code Playgroud)