如何纠正矢量索引?

时间:2015-09-16 15:02:23

标签: matlab indexing statistics cluster-analysis

好的,所以我将数据聚类到集群中,然后使用列对其进行索引。数据采用运动矢量的形式,因此我的数据在聚类后将如下所示:

[index x y x' y']

例如:

[1 3 5 4 6;
 1 4 6 5 7;
 2 3 5 4 6;
 2 8 9 9 3;
 3 2 3 2 4]

在上面的数组中有3个聚类,聚类1和2各包含2个向量。

我的问题是我有时必须根据某些标准删除群集,可能会留下:

[2 3 5 4 6;
 2 8 9 9 3;
 3 2 3 2 4]

我希望能够在删除后更正索引,以便从1开始并以群集数结束。所以在这种情况下,将2s替换为1s和3s替换为2s。

我确定必须有一个使用for循环的简单方法,但我已经尝试了一段时间而且不能正确吗?

2 个答案:

答案 0 :(得分:1)

unique的简单调用将帮助您实现这一目标。您可以使用它的第三个输出,使用新数据矩阵(索引向量)的第一列来分配每个唯一ID和新ID,以替换其第一列。另外,请确保使用'stable'标志,以便按照从上到下的顺序分配ID:

 %// Data setup
 A = [1 3 5 4 6;
      1 4 6 5 7;
      2 3 5 4 6;
      2 8 9 9 3;
      3 2 3 2 4];

 %-----
 B = A(3:end,:); %// Remove first two rows

 %// Go through the other IDs and reassign to unique IDs from 1 up to whatever
 %// is left
 [~,~,id] = unique(B(:,1), 'stable');

 %// Replace the first column of the new matrix with the new IDs
 B(:,1) = id; %// Replace first column with new IDs

我们得到:

>> B

B =

     1     3     5     4     6
     1     8     9     9     3
     2     2     3     2     4

答案 1 :(得分:1)

假设你的矩阵被称为data,试试这个:

>> data = [2 3 5 4 6;
           2 8 9 9 3;
           3 2 3 2 4]

data =

     2     3     5     4     6
     2     8     9     9     3
     3     2     3     2     4

>> data(:,1) = cumsum(diff(data([1 1:end], 1)) ~= 0) + 1

data =

     1     3     5     4     6
     1     8     9     9     3
     2     2     3     2     4