MATLAB:改进for循环

时间:2018-06-11 11:27:36

标签: arrays matlab 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

我在想uisng arrayfun。但是,首先我不知道如何添加单元格范围(即包括当前单元格的前五个单元格),其次,我不确定arrayfun是否比使用循环更快?

1 个答案:

答案 0 :(得分:3)

您正在描述的滑动向量乘法是所谓的convolution的示例。以下结果与示例中的循环产生相同的结果:

vout = [nan(windowSize-1,1);
        conv(mat,flip(multMat),'valid')];

如果您的输出确实不需要循环中未覆盖的前导NaN值,那么conv表达式就足够了,而不会将NaN元素连接到它。< / p>

对于足够大的向量,这当然不能保证你想要的那么快,但是MATLAB的内置卷积实现可能非常接近于该工作的最佳工具。