簡體   English   中英

MATLAB:改進for循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM