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中.
我会这样做的
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)两次,效率会降低.