[英]MATLAB: Improving for-loop
我需要將列向量的一部分與固定的行向量相乘。 我使用for循環解決了這個問題。 但是,我想知道性能是否可以提高,因為我必須執行大約5000萬次這種計算。 到目前為止,這是我的代碼:
multMat = 1:5;
mat = randi(5,10,1);
windowSize = 5;
vout = nan(10,1);
for r = windowSize : 10
vout(r) = multMat * mat( (r - windowSize + 1) : r);
end
我在想arrayfun
。 但是,首先我不知道如何處理單元格范圍(即包括當前單元格的前五個單元格),其次,我不確定arrayfun
是否會比使用循環更快?
您正在描述的滑動向量乘法是所謂的卷積的一個示例。 以下結果與示例中的循環產生相同的結果:
vout = [nan(windowSize-1,1);
conv(mat,flip(multMat),'valid')];
如果您的輸出實際上不需要在循環中未被覆蓋的前導NaN
值,那么conv
表達式就足夠了,而不會將NaN
元素連接到它。
對於足夠大的向量,這當然不能保證你想要的那么快,但是MATLAB的內置卷積實現可能非常接近於工作的最佳工具。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.