繁体   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