Создание чисел с помощью цикла For с использованием Matlab/octave

Я пытаюсь зациклить шаблон чисел, используя цикл For в Matlab/октаве. Я ищу шаблон 40,80,160,320,280,200, а затем к каждому добавляется 1 > поэтому схема будет выглядеть так:

40,80,160,320,280,200,41,81,161,321,281,201,42,82,162,322,282,202

Я попытался использовать цикл for ниже

clear all
numL_tmp=[40;80;160;320;280;200]

numL=[numL_tmp];
for ii=1:length(numL_tmp)
    for jj=1:4
        numL=[numL;numL_tmp(ii,1)+jj]
    end
end

Но я получаю

40,80,160,320,280,200,41,42,81,82,161,162,321,322,281,282,201,202

Как я могу это исправить?


person Rick T    schedule 08.04.2013    source источник


Ответы (3)


Для указанной проблемы вложенные циклы не нужны. Вы можете просто сделать следующее:

clear all;
numL_tmp=[40;80;160;320;280;200];

numL = numL_tmp;
for ii=1:2
    numL = [numL;numL_tmp+ii];
end

numL

Это даст:

numL =

    40
    80
   160
   320
   280
   200
    41
    81
   161
   321
   281
   201
    42
    82
   162
   322
   282
   202

Это работает, потому что MATLAB распознает часть кода numL_tmp+ii как что-то эквивалентное numL_tmp + ii*ones(size(numL_tmp)).

person Roney Michael    schedule 08.04.2013

Вы можете полностью избежать циклов:

N = 3;
numL = kron(ones(N,1),numL_tmp) + kron((0:N-1)',ones(numel(numL_tmp),1));
person yuk    schedule 08.04.2013

Есть более простые способы сделать это, но фундаментальная проблема с вашим кодом заключается в том, что внутренний и внешний циклы расположены в неправильном порядке. Посмотрите, что произойдет, если вы оставите свой код как есть, а просто поменяете порядок двух циклов:

...
numL=[numL_tmp];
for jj=1:4
    for ii=1:length(numL_tmp)
       numL=[numL;numL_tmp(ii,1)+jj]
   end
end
person Stuart    schedule 08.04.2013