matlab代码的矢量化版本对标准循环产生不同的结果

时间:2013-12-18 18:52:01

标签: matlab loops vectorization

是的,我对矢量化的概念非常陌生,但我正试图让它绕过它。目前,我正在尝试调整我编写的一些代码来实现canny边缘检测到矢量化形式,而我不明白的原因是:

for r=1:fsize
    for c=1:fsize
        mask(r,c) = mask(r,c)/Z;
    end
end

会产生不同的结果:

mask(r:fsize,c:fsize) = mask(r:fsize,c:fsize)/Z;

当我理解他们应该做同样的事情时?

2 个答案:

答案 0 :(得分:3)

什么是r,第二个解决方案中的c是什么?可能你需要元素划分./

mask = mask./Z;

如果这不能解决您的问题,请提供输入数据以重现。

答案 1 :(得分:1)

for r=1:fsize
    for c=1:fsize
        mask(r,c) = mask(r,c)/Z;
    end
end

相当于

mask(1:fsize, 1:fsize) = mask(1:fsize, 1:fsize) / Z;

注意 - 1:fsize不是c:fsize

这假设Z是常数。做* (1 / Z)只需稍微快一点 - 只进行一次除法,然后乘以......