【问题标题】:2x2 Array Permutation in Matlab with no loopMatlab中的2x2数组排列没有循环
【发布时间】:2016-08-22 12:34:50
【问题描述】:

我目前正在做一个项目,我有一个数组,我想在不使用数组的情况下对所有元素进行 2x2 排列 我有这样的事情:

A = [ 1 , 3 , 5 , 7]

我想要这样的东西

1 1
1 3
1 5
1 7
3 1
3 3
3 5
3 7
5 1
5 3
5 5
5 7
7 1
7 3
7 5
7 7

如果我可以选择一个数字是否可以自行排列(egg: no 77 66 55)或顺序是否重要(egg:5 3 等于 3 5,因此仅在输入时),我也会很有趣

【问题讨论】:

    标签: matlab permutation


    【解决方案1】:

    您可以使用 meshgrid 轻松做到这一点

    [x,y] = meshgrid(A, A);
    out = [x(:), y(:)];
    
    %    1     1
    %    1     3
    %    1     5
    %    1     7
    %    3     1
    %    3     3
    %    3     5
    %    3     7
    %    5     1
    %    5     3
    %    5     5
    %    5     7
    %    7     1
    %    7     3
    %    7     5
    %    7     7
    

    您可以删除自我匹配(即5 57 7 等)

    out(out(:,1) == out(:,2),:) = []
    
    %    1     3
    %    1     5
    %    1     7
    %    3     1
    %    3     5
    %    3     7
    %    5     1
    %    5     3
    %    5     7
    %    7     1
    %    7     3
    %    7     5
    

    当顺序很重要时,您可以通过首先按列排序然后获取唯一行来删除重复项

    out = unique(sort(out, 2), 'rows')
    
    %    1     3
    %    1     5
    %    1     7
    %    3     5
    %    3     7
    %    5     7
    

    【讨论】:

      【解决方案2】:

      如果您想要重复组合(顺序很重要),请使用 perms 并在前两列中使用 unique 行。

      例子:

      A = [ 1 , 3 , 5 , 7]
      R = perms(A)
      unique(R(:,1:2), 'rows')
      
      ans =
      
       1     3
       1     5
       1     7
       3     1
       3     5
       3     7
       5     1
       5     3
       5     7
       7     1
       7     3
       7     5
      

      如果您想要真正独特的组合,请使用combnk

      例子:

      A = [ 1 , 3 , 5 , 7]
      combnk(A, 2)    % all combinations using 2 elements
      
      ans =
      
       5     7
       3     7
       3     5
       1     7
       1     5
       1     3
      

      【讨论】:

        猜你喜欢
        • 2020-12-03
        • 2019-05-22
        • 1970-01-01
        • 1970-01-01
        • 2016-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多