Arrays 用除数替换mod函数中的0

Arrays 用除数替换mod函数中的0,arrays,matlab,for-loop,mod,Arrays,Matlab,For Loop,Mod,我如何通过简单地使用mod函数和一些算法在一行中实现这一点?上述代码在for循环中运行,m是迭代器 结果应该是: if mod(m,18) == 0 mm = 18; else mm = mod(m,18); end 具有阵列支持,因此不需要循环: 1 -> 1 2 -> 2 . . . 17 -> 17 18 -> 18 19 -> 1 20 -> 2 . . 36 -> 18 37 -> 1 . 这个解决方案实际上效果更好,我只

我如何通过简单地使用
mod
函数和一些算法在一行中实现这一点?上述代码在
for
循环中运行,
m
是迭代器

结果应该是:

if mod(m,18) == 0
   mm = 18;
else
   mm = mod(m,18);
end
具有阵列支持,因此不需要循环:

1 -> 1
2 -> 2
.
.
.
17 -> 17
18 -> 18
19 -> 1
20 -> 2
.
.
36 -> 18
37 -> 1
.
这个解决方案实际上效果更好,我只是想说明,如果您希望18的倍数显示为其原始值,而不是18,那么这段代码也很容易做到:

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

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

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

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-1,18)+1
?我想您必须澄清如何处理
36
。您想让
36
显示为
36
,还是显示为
18
?@adrian所有
18
的倍数都是
18
,包括
36
<代码>mod(m-1,18)+1工作得很好。这与我的答案有什么不同,我的答案在你的答案发布前20小时发布?此外,我为什么要“试试这个”?解释为什么一个解决方案是有效的。@Adriaan,我的印象是我回答了提出问题的人。你不需要尝试任何东西。对我来说,我宁愿不定义一个不必要的tmp变量。第一条评论有更简洁的解决方案,所以请放弃我的。部分是;直接的答案是给回答的人,但是Stack Overflow努力成为一个知识数据库。这要求人们在将来也能找到并理解答案,因此最好解释一段代码的工作原理。至于你和我的代码之间的差异:我调用
m=data;mm=tmp
,不涉及临时变量。最后:我可以忽略你的答案,放弃,即删除它,只能由你按下答案下的“删除”按钮来完成,这取决于你是否这样做。
mm = mod(m,18);
mm(mm==0)=18;