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
Решение rahnema1, предоставленное в комментариях , действительно работает лучше,Я просто хочу показать, что в случае, если вы хотите, чтобы кратные числа 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