用除数替换 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;
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
解决方案
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;