我将如何在Matlab中对'for'循环进行矢量化?

时间:2014-09-20 14:48:50

标签: matlab loops vector vectorization

我有这个玩具示例:

l = [1, 2, 3, 4, 5];
a = zeros(3, 1);
for p = 1:3
    a(p) = sum(l(p:p+2));
end;

此示例计算' l'中每3个元素的总和,它们彼此接近并将其写入' a'。现在,是否可以使用矢量化和矩阵运算重写相同的代码,而无需使用'环?我尝试过类似的东西:

p = 1:3;
a(p) = sum(l(p:p+2));

结果是[6,6,6],它计算了前三个元素的总和并将其写在' a'在每个位置。这只是一个玩具示例,但我需要在3d 256x256x128阵列上执行类似的操作,其中20x20x20立方体元素总和,使用' for'那里的循环很慢。那么,有没有一种快速解决这个问题的方法呢?

修改: 迪瓦卡建议我在这里使用我的实际案例。好吧,这是其中最重要的部分,我正在尝试重写:

编辑2: 谢谢你的答案。理解了这个想法,删除了上面的代码,现在重写它。

1 个答案:

答案 0 :(得分:4)

您正在描述基本卷积:

a = conv(l,ones(1,3),'valid'); % a should have 3 elements

对于3d,使用convn的方式与(20,20,20)

类似