我想循环两个变量的特定组合。我怎样才能做到这一点?

时间:2015-08-03 14:51:14

标签: matlab matrix octave

我想有2个变量的for循环,但理想情况下我希望如下:

  1. (1,1)
  2. (2,1)(2,2)(1,2)
  3. (3,1)(3,2)(3,3)(2,3)(1,3)
  4. (4,1)(4,2)(4,3)(4,4)(3,4)(2,4)(1,4)
  5. 如果我看起来正确,这应涵盖所有组合。如何通过一个或两个for循环实现此层次结构?每个“级别”的顺序无关紧要。

    我的解决方案是:

    for i=1:4
        for j = 1:i
            [i j] 
            [j i] 
        end 
    end.
    

    这给出了期望值,但重复(i,i)值。这个问题是它只适用于方形矩阵,遗憾的是,对我来说情况并非如此。

3 个答案:

答案 0 :(得分:2)

所以如果你想要一个for循环来产生这些值,那么这是一种方法:

b=[];
for n=1:3
    for k=1:n
        a(:,k)=[n k];
    end
    b{n}= [a flipud(a(:,1:size(a,2)-1))]';
end


celldisp(b)

b{1} =

 1     1



b{2} =

 2     1
 2     2
 1     2



b{3} =

 3     1
 3     2
 3     3
 1     3
 2     3

您可以在b中选择所需的单元格以获取所需的值对。

答案 1 :(得分:1)

[x, y] = meshgrid([1:1:5],6:1:10);
foo = @(x_, y_) sprintf("C(%d, %d)\n", x_, y_);
foo(x, y)

这是次优的,因为它计算两次(n,n)。

matlab meshgrid

答案 2 :(得分:0)

感谢您的所有输入。对我来说,最好的实现如下,其中n和m是i和j的范围:

for k = 2:n+m
    [X,Y] = find((([1:n]' + [1:m])==k));
    for I= [X Y]'
        i = I(1)
        j = I(2)
    end
end