我在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岁。
如何改进代码?
答案 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
如果有什么事情没有意义,请告诉我。