如何编写没有循环的程序

sta*_*uyz 2 math matlab for-loop function while-loop

我试图在没有任何for或while循环的情况下编写以下程序:

function [B] = check(A, k)
B = [];
[nrow ncol] = size(A);
for i = 1:nrow
     for j = 1:ncol
         if mod(A(i,j),k) == 0
             B = [B;A(i,j)];
         else
             B = [B;A(i,j)*k];
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

基本上,该程序检查矩阵A中的元素是否可被元素k整除.如果A(i,j)可被k整除,则A(i,j)处的元素将被置于矩阵B中.如果A(i,j)不能被k整除,那么A(i,i, j)将乘以k并放在矩阵B中.

eve*_*ler 7

我会这样做的

auxA = mod(A,k);
B = A(auxA==0) + A(auxA~=0).*k;
Run Code Online (Sandbox Code Playgroud)

auxA==0在条件为真的位置生成与大小相同的矩阵auxA,1's在其他位置生成假.

A(auxA==0)返回A(i,j)矩阵auxA==0为1的位置,以及0所在的值auxA~=0.

编辑.你可以在一行中完成这项工作

B = A(mod(A,k)==0) + A(mod(A,k)~=0).*k;
Run Code Online (Sandbox Code Playgroud)

但是,由于你计算了mod(A,k)两次,效率会降低.