用除数替换 mod 函数中的 0

Replace 0 from mod function with the divisor

if mod(m,18) == 0
   mm = 18;
else
   mm = mod(m,18);
end

如何通过简单地使用 mod 函数和一些算术在一行中完成此操作?上面的代码是 for 循环中的 运行,m 是迭代器。

结果应该是:

1 -> 1
2 -> 2
.
.
.
17 -> 17
18 -> 18
19 -> 1
20 -> 2
.
.
36 -> 18
37 -> 1
.

mod 支持数组,因此不需要循环:

data = 1:n;
tmp = mod(data,18);
tmp(tmp==0) = 18; % Set all numbers divisible by 18 to 18
% tmp(tmp==0) = 18*(1:floor(n/18)); % Set all numbers divisible by 18 to their original

解决方案 确实效果更好,我只是想表明,如果您希望 18 的倍数显示为原始值而不是 18,这也可以通过此代码轻松完成:

mm=mod(m-1,18)+1
mm(mm==18) = 18*(1:floor(n/18));

创建相同数组的另一种方法是使用 repmat 而不是 mod:

N=100; % total array length
n=18; %
m=1:n;
mm=repmat(m,[1 ceil(N/n)]);
mm=mm(1:N); % chop off remainer

试试这个:

mm = mod(m,18);
mm(mm==0)=18;