0

我正在尝试使用matlab / octave中的For循环循环数字模式我正在寻找的模式是 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

我怎样才能解决这个问题?

4

3 回答 3

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)).

于 2013-04-08T18:29:11.353 回答
3

您可以完全避免循环:

N = 3;
numL = kron(ones(N,1),numL_tmp) + kron((0:N-1)',ones(numel(numL_tmp),1));
于 2013-04-08T18:39:26.717 回答
2

有更简单的方法可以做到这一点,但您的代码的根本问题是内部和外部循环的顺序错误。看看如果你让你的代码保持原样会发生什么,只是简单地交换两个循环的顺序:

...
numL=[numL_tmp];
for jj=1:4
    for ii=1:length(numL_tmp)
       numL=[numL;numL_tmp(ii,1)+jj]
   end
end
于 2013-04-08T18:29:40.070 回答