簡體   English   中英

具有功能的for循環的Octave / Matlab矢量化

[英]Octave/Matlab vectorization of for-loop with function

我有一個將向量作為輸入的函數,我想將函數與上一步的輸出應用於每個元素。 我實現了一個for循環:

function res = myFunc(F)
if (numel(F) == 1)
    res = F(1);
    return;
end;
B = F(1);
for idx = 2:numel(F)
    B = procAcc(F(idx),B);
res = B;    
end

函數procAcc具有兩個參數並產生輸出。 也就是說,如果輸入是向量(f1,f2,f3),則我首先應用函數procAcc(f1,f2),它產生一個結果(res),然后在下一步中應用函數procAcc(a3,res )產生最終結果。 我的問題是Matlab(或Octave)是否支持矢量化方法,從而允許我跳過for循環。

在這種情況下,您不能使用“向量化”,因為元素i計算取決於元素i-1 您的計算必須鏈接起來。 而是嘗試使用功能性方法-“ mapreduce”是一個強大的概念,適用於各種情況。 Octave中似乎沒有本機函數,但是答案引用了提供reduce函數的程序包。 如果使用它,則for循環應替換為以下內容:

res = reduce(@(x,y)(procAcc(x,y)), F);

通常,mapreduce通過for循環提供一些性能上的好處,但是在當前情況下,這將取決於提供reduce函數的包的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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