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