我正在尝试使用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
我该如何解决这个问题?
答案 0 :(得分: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))
的内容。
答案 1 :(得分:3)
你可以完全避免循环:
N = 3;
numL = kron(ones(N,1),numL_tmp) + kron((0:N-1)',ones(numel(numL_tmp),1));
答案 2 :(得分:2)
有更简单的方法可以做到这一点,但代码的根本问题在于内部和外部循环的顺序错误。看看如果按原样保留代码会发生什么,但只是简单地交换两个循环的顺序:
...
numL=[numL_tmp];
for jj=1:4
for ii=1:length(numL_tmp)
numL=[numL;numL_tmp(ii,1)+jj]
end
end