MATLAB / OCTAVE - 分支循环?或并行循环?

时间:2014-05-16 06:22:25

标签: matlab octave

编程游戏还是新手,但我需要一些帮助!我不确定如何描述我想做的事情,但我会尽力给予它。我有一组数字由我放在一起的算法产生。例如:

....
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个数据点...

你明白我的意思吗?

由于 詹姆斯

1 个答案:

答案 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开始会得到相同的结果(如果没有,它会变得更复杂)。