具有函数的for循环的Octave / Matlab向量化

时间:2016-10-07 18:02:50

标签: matlab function octave vectorization

我有一个带矢量作为输入的函数,我想用上一步的输出将函数应用于每个元素。我已经实现了一个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循环的矢量化方法。

1 个答案:

答案 0 :(得分:0)

你不能使用"矢量化"在这种情况下,元素i的计算取决于元素i-1。你的计算必须链接。而是尝试使用功能方法 - " mapreduce"是一个强大的概念,适用于各种情况。在Octave中似乎不是本机函数,但this回答引用了提供reduce函数的包。如果您使用它,for循环应该替换为这样的东西:

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

通常mapreduce比for循环提供了一些性能优势,但在当前情况下,这将取决于提供reduce函数的包的实现。