我想在CH(ex:7)中取一个元素然后应用N(7,CH),这意味着除了7之外的CH的所有元素,然后我想移动到第二个元素12检查N(12) ,CH),CH这里我想要CH的所有元素,除了12& 7。 然后如果N == 1我想要将数字保存在矩阵中。 这是我尝试过的代码,但问题是它产生了矩阵" one_hop_heads"重复一些结果ex: one_hop_heads = [7 12; 44 49; 12 7]我不想要这样的事情 任何人都可以帮助我吗?
for i=1:length(CH)
for j=1:length(CH)
if i~=j
if N(CH(i),CH(j))==1
one_hop_heads= [one_hop_heads; CH(i),CH(j)];
end
end
end
end
答案 0 :(得分:1)
看看这是否是您正在寻找的:
for ii=1:length(CH)
for jj=ii+1:length(CH)
if N(CH(ii),CH(jj))==1
one_hop_heads= [one_hop_heads; CH(ii),CH(jj)];
end
end
end
(请注意,我已将变量i
和j
更改为ii
和jj
,以避免与内置虚数冲突。)< / p>
这是做什么的:
jj
上的每个循环都从ii+1
开始。这可确保ii
始终严格小于jj
(删除一个if
语句)。通过以这种方式使用有序对,您可以确保如果查看一对(ii, jj)
,则永远不会查看对(jj, ii)
。
我相信你也可以使用find
在没有循环的情况下做到这一点,类似于Jigg的回答:
N2 = triu(N(CH,CH),1);
[ii,jj] = find(N2);
one_hop_heads = [CH(ii),CH(jj)];
注意:这两种解决方案都假设N
是对称的。如果不是这种情况,您必须澄清N
的结构是什么,我可以调整解决方案。