首页 > 解决方案 > matlab循环通过nxn矩阵陷入无限循环

问题描述

我在 matlab 中有 2 个 nxn 矩阵,我想检查 m1 的所有元素,如果 m1(x,y) 的值 <100 或 >200 将 m2(x,y) 的值设置为 1。这应该是超级简单,但是它是用 matlab 编写的,并且由于某种我不明白的原因而无休止地循环。这是代码

for q=1:256
    for w=1:256
         if m1(q,w) > 200 | m1(q,w) < 100
                m2(q,w) = 1
         end
    end
end

标签: matlab

解决方案


您的原始代码还可以,但是显示输出需要很长时间。

请注意,当给 m2 赋值的行如下:

m2(q,w) = 1

对于 for 循环的每次迭代,Matlab 显示整个 m2 矩阵,这需要大量时间逐行执行。

要解决此问题,请添加分号以防止显示 m2 矩阵,您应该会看到执行时间如下:

tic
m1 = round(255*rand(256));
for q=1:256
    for w=1:256
         if m1(q,w) > 200 | m1(q,w) < 100
                m2(q,w) = 1;
         end
    end
end
toc
Elapsed time is 0.011460 seconds.

最后,评论部分的 Cris Luengo 也有一种优雅的方式来执行您的计算。


推荐阅读