[英]Tips to reduce the execution time of this Matlab loop containing several matrix operations
我正在嘗試使用以下簡化的 Matlab 代碼評估矩陣Y(p,k)
和Z(p,k)
。
它們取決於我能夠預先計算的一些矩陣A(j,k)
、 B(j,p)
和C(j,k)
,所以我剛剛將它們初始化為這個 MWE 的隨機 arrays 。 (請注意,B 與 A 和 C 的大小不同)。
Nj = 5000;
Nk = 1000;
Np = 500; % max loop iterations
A = rand(Nj,Nk); % dummy precalculated matrices
B = rand(Nj,Np);
C = rand(Nj,Nk);
Y = zeros(Np,Nk); % allocate storage
Z = zeros(Np,Nk);
tic
for p = 1:Np
X = A .* B(:,p);
Y(p,:) = sum( X , 1 );
Z(p,:) = sum( C .* X , 1 );
end
toc % Evaluates to 11 seconds on my system
如上所示,我通過循環索引p
重復我的計算(因為矩陣B
取決於p
)。
通過將所有可以預先計算的內容移到循環之外(包含在 A、B 和 C 中),我已經設法做到了這一點,但是在我的系統上,這段代碼仍然需要大約 11 秒才能執行。 任何人都可以在 Matlab 中看到一種方法來加快速度,或者甚至可以一次刪除循環和處理?
謝謝
我認為以下應該是等效的並且更快:
Y = B' * A;
Z = B' * (A.*C);
筆記:
B
是復值,那么你應該使用.'
換位。A.*C
以避免額外的元素乘法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.