【发布时间】:2018-12-03 13:27:10
【问题描述】:
我在 Matlab 中有两个向量 U1 和 U2,维度为 9x1,它们都列出了从 1 到 9 的整数。
clear
U1=(1:1:9).';
U2=U1;
然后我通过获取U1 和U2 的笛卡尔积来构造大小为(9*9)x1 的向量U
[ca, cb] = ndgrid(U1, U2);
U=[ca(:) cb(:)];
U的结构基本上是
U=[1 1;
2 1;
...;
9 1;
---;
1 2;
...
9 2;
---;
...
9 9]
现在,我希望您帮助构造一个向量 ind,列出 U 的无序行对的行索引,这样:
(*) i~=k 和 j~=l 其中[i,j]、[k,l] 是来自U 考虑的两行
我写了一段代码来做我想做的事,但在我看来,由于下面的步骤 1),它的效率并不高。你能帮忙改进吗?
步骤 1) 从U
ind_temp=nchoosek([1:1:9^2], 2); %3240x2
步骤2)从ind_temp中删除不满足(*)
ind=cell(size(ind_temp,1),1);
for p=1:size(ind,1)
if U(ind_temp(p,1),1)~=U(ind_temp(p,2),1) && ...
U(ind_temp(p,1),2)~=U(ind_temp(p,2),2)
ind{p}=ind_temp(p,:);
end
end
ind=vertcat(ind{:});
【问题讨论】: