编程游戏还是新手,但我需要一些帮助!我不确定如何描述我想做的事情,但我会尽力给予它。我有一组数字由我放在一起的算法产生。例如:
....
10 10 10
11 11 11
12 1 2
13 3 4
14 12 13
15 6 7
16 5 15
17 8 9
....
基本上我想要做的是将这些索引号分配给组。让我们说我从第一列中的数字14开始。它将属于第1组,因此我在第14行“1”的新列中为第一组标记它。第二列和第三列显示了与索引14分组的其他索引号。因此,我使用如下代码:
FindLHS = find(matrix(:,1)==matrix(14,2));
和 FindRHS = find(matrix(:,1)== matrix(14,3));
如此清楚,这将产生
的结果FindLHS = 12
FindRHS = 13
然后我将继续将12和13标记为属于组“1”,正如我为14做的那样
现在我的问题是我想对12和13进行同样的程序,找到并标记12和13的索引是(1,2)和(3,4)。有没有办法为1,2,3和4的idx重复该代码?因为真实数据集中有超过5000个数据点...
你明白我的意思吗?
由于 詹姆斯
答案 0 :(得分:1)
您真正想要做的就是找到matrix(:,1)
包含您已找到的某个数字的地方,将第二和第三列中的数字包含在您的群组列表中(假设它们尚未存在) ,当该列表停止增长时停止,对吗?这可能不是最有效的方法,但它为您提供了基本的想法:
while ~(numel(oldnum)==numel(num))
oldnum = num;
idx = ismember(matrix(:,1),oldnum)
num = unique(matrix(idx,:))
end
Output:
num =
1
2
3
4
12
13
14
现在,如果你的第一列按字面顺序只是你的数字1到5000,你甚至不需要找到索引,你可以直接使用你的数字列表。
要为多个组执行此操作,您只需要一个存储每个组信息的外部循环,然后选择下一个未使用的数字。我假设你的个人群体是一致的,所以无论你选择哪一个数字都会得到相同的结果 - 例如从2或14开始会得到相同的结果(如果没有,它会变得更复杂)。