For loop 更简单的书写方式';对于';八度

For loop 更简单的书写方式';对于';八度,for-loop,matrix,replace,octave,For Loop,Matrix,Replace,Octave,我用八度音阶写了下面两段代码 给出一个矩阵“img”,我想: 将不等于255的所有元素替换为0: for i = 1:m for j = 1:n if (img(i,j) ~= 255) img(i,j) = 0; endif endfor endfor 将所有负元素替换为0,将所有大于255的元素替换为255: for i = 1:m for j = 1:n if (img(i,j) < 0

我用八度音阶写了下面两段代码

给出一个矩阵“img”,我想:

将不等于255的所有元素替换为0:

for i = 1:m
    for j = 1:n
        if (img(i,j) ~= 255)
            img(i,j) = 0;
        endif
    endfor
endfor
将所有负元素替换为0,将所有大于255的元素替换为255:

for i = 1:m
    for j = 1:n
        if (img(i,j) < 0)
            img(i,j) = 0;
        endif
        if (img(i,j) > 255)
            img(i,j) = 255;
        endif
    endfor
endfor
i=1:m时的

对于j=1:n
if(img(i,j)<0)
img(i,j)=0;
恩迪夫
如果(img(i,j)>255)
img(i,j)=255;
恩迪夫
外循环
外循环

有没有一种更简单的方法来写这篇文章?

像MATLAB这样的倍频程是为矩阵或向量计算而优化的。 也就是说,它有很多优化的编译代码,可以很好地处理矩阵乘法、求逆或两个矩阵相加等问题

另一方面,如果你做一个for循环,它就不能利用那些优化过的代码中的任何一个,并且必须被解释,所以做同样的事情通常需要更长的时间

以向量(或矩阵)的形式编写代码,或将其转换为向量形式的方式称为“向量化”

对于您询问的第二种情况,您应该尝试以下方法:

  img(img<0) = 0;

  img(img>255) = 255; 
  img(img ~= 255) = 0; 

您可以在第二个for中使用else if(而不是单独的if),因为img(i,j)将是255,但不能同时是255