Matlab:如何使用两个嵌套的for循环以升序生成连续的数字列表?

时间:2016-02-11 11:41:00

标签: matlab for-loop

我想从1获得一个连续数字的数组到两个嵌套循环的限制的乘积。我希望下面的例子能够澄清这个问题。如果我有嵌套循环:

for i = 1:limit_loop_1
    for j = 1:limit_loop_2
        a = ???;
       disp(a)
    end
end

我想获得a = (1:(limit_loop_1*limit_loop_2))'

例如,拥有:

for i = 1:3
    for j = 1:5
       a = ????;
       disp(a)
    end
end

我想得到:

a=
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

我发现了类似的Java问题(如here),但对于Matlab却没有。提前谢谢。

编辑:我需要这个特殊的程序,因为我将使用索引来引用另一个数组。所以,如果我在嵌套循环中有一个大小为(100,1,15)的3D数组A,我想在每次迭代时考虑数组的15个元素中的每一个。在代码中,这将是:

for k = 1:100
    for i = 1:3
        for j = 1:5
            something = A (k,1,????)
        end
    end
end

这就是为什么?????应该从1到15.希望这能澄清我的问题。

2 个答案:

答案 0 :(得分:0)

显然,您已经提供的解决方案(a = (1:(limit_loop_1*limit_loop_2))')是正确且非常好的。但是,如果必须使用嵌套循环,只需将a视为外部计数器

a=0;
for i = 1:3
    for j = 1:5
       a = a+1;
       disp(a)
    end
end

这基本上计算了使用嵌套循环进行的迭代次数(在这种情况下为3 * 5)。

或者如果你想利用索引ij,你可以重新调整Matlab中的Java示例,考虑到在Matlab中索引从1开始,而在Java中它们从0:

for i = 1:3
    for j = 1:5
        c =1+(j-1)*1+(i-1)*(5);
        disp(c)
    end
end

答案 1 :(得分:-1)

我不知道你为什么要这样做,但我会接受你的话。这将为您提供所需的结果:

for ii = 1:3
    for jj = 1:5
       a = 5*(ii-1)+jj;
       disp(a)
    end
end

(我更改了ij的循环变量,因为默认情况下它们是假想的单位变量,如果你覆盖它们,有些人会感到沮丧。)

结果:

>> loop15
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15