2015-09-16 36 views
1

好的,我正在將數據聚類到集羣中,然後使用列對其進行索引。該數據是在運動矢量的形式,因此我的數據看起來像這樣被羣集之後:如何更正向量索引?

[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 3 5 4 6; 
2 8 9 9 3; 
3 2 3 2 4] 

我希望能夠糾正刪除後的指數,所以它開始於1並以簇的數量結束。所以在這種情況下用2s替換1s和3s。

我確定一定有一個簡單的方法使用for循環,但我一直在嘗試一段時間,不能得到正確的?

回答

1

一個簡單的電話unique將幫助你做到這一點。您可以使用它的第三個輸出來使用新數據矩陣(索引向量)的第一列分配每個唯一和新的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 
+0

我完全忘了獨特。 :) +1簡單 –

+0

太棒了!非常感謝! –

+0

我的榮幸。如果我們中的任何人都幫助過,請考慮接受我們的答案之一。祝你好運! – rayryeng

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 
+0

如果我不知道'unique' :) +1,我會這樣做。 – rayryeng