4维矢量无重复

时间:2014-10-01 22:18:11

标签: matlab loops

我在Matlab中有以下代码:

clear all;

B = 3;
U = 2;

i = 1;

for j=1:B
    for u=1:U
        for u0=u:U
            for j0=j:B
                A(i,:)=[u j u0 j0];
                i = i + 1;
            end
        end
    end
end

我想写的是所有(u,j)和(u0,j0)的组合,没有重复。重复我的意思是,例如(1,2),(2,3)(2,3),(1,2)或代码[1 2 2 3]等于[2 3 1 2]相同。这应该给我21个组合。但我只有18岁。

如何改进代码?

1 个答案:

答案 0 :(得分:3)

根据您希望解决的问题有多大,这是一种可能的方法。

[bm,um]=meshgrid(1:B,1:U); % Get all the combinations of 1:B and 1:U
M=[um(:) bm(:)]; % These are the distinct pairs of digits to combine
P=[(1:U*B).'*[1 1];nchoosek(1:U*B,2)]; % This gives row indices for all the pairs we want
A=[M(P(:,1),:) M(P(:,2),:)] % This Uses those row indices to give the desired matrix

如果有什么事情没有意义,请告诉我。