我剛纔異形我的MATLAB代碼,有一個瓶頸,在本作循環:方法,以加快循環在MATLAB
for vert=-down:up
for horz=-lhs:rhs
y = y + x(k+vert.*length+horz).*DM(abs(vert).*nu+abs(horz)+1);
end
end
其中y,x和DM是我已經定義的向量。我通過書寫向量化了循環,
B=(-down:up)'*ones(1,lhs+rhs+1);
C=ones(up+down+1,1)*(-lhs:rhs);
y = sum(sum(x(k+length.*B+C).*DM(abs(B).*nu+abs(C)+1)));
但是,這樣做的速度足夠慢。
有沒有關於如何加快這個循環的建議?
在此先感謝。
什麼是「向下」,「向上」,「LHS」,「RHS」和「NU 「? ..與y,x,DM有任何關係嗎?或..你能給我更多的數學解釋你想做什麼? – Efrain 2011-05-10 12:30:25
我很確定你的向量化操作不會和for循環做同樣的事情。你獲得了相同的結果嗎? – Phonon 2011-05-10 13:05:23
@Efrain,我不確定我們在這裏需要更多的數學細節。問題只是關於代碼的計算複雜性,而不是其語義意義。 – Phonon 2011-05-10 13:06:21