2016-05-13 65 views
3

我有一個矩陣A,它是(243 x 5)。我想挑選矩陣的唯一行向量,但考慮到具有相同元素但排序不同的行向量應該被認爲是相同的。消除重複的向量,但元素的順序不同

例如,假設爲簡單起見,該A矩陣是(10×5),並且等於:

A=[1 2 1 2 3 
    1 3 1 1 1 
    1 3 1 1 2 
    1 2 1 1 3 
    2 3 1 2 1 
    1 3 1 2 2 
    1 3 1 2 3 
    1 3 1 3 2 
    1 3 1 3 1 
    1 3 2 3 1] 

在上面的例子中,行(1,5,6)將被認爲是等價它們具有相同的元素,但順序不同。另外,行(3和4)是等效的,行(7,8,10)也是等價的。

是否有任何方法可以編寫一個代碼來刪除所有「重複行」,即僅傳遞A行(1,2,3,7和9)的代碼?

到目前爲止我碰到這種解決方案:

B(:,1) = sum(A == 1,2); 
B(:,2) = sum(A == 2,2); 
B(:,3) = sum(A == 3,2); 
[C, ia, ic] = unique(B,'rows'); 
Result = A(ia,:); 

這也提供了我所期待的一個警告 - 它提供的唯一行根據上述定義的標準A,但它不是交付它找到的第一行。即而不是交付行(1,2,3,7,9)它交付行(7,1,9,3,2)。

無論如何,我可以強迫他以正確的順序傳遞行?還有更好的方法呢?

回答

1

如下你可以這樣做:

  1. Sort沿第二維度A;
  2. 獲取穩定指數unique(排序)行;
  3. 將結果作爲行索引使用到原始A中。

即:

As = sort(A, 2); 
[~, ind] = unique(As, 'rows', 'stable'); 
result = A(ind,:); 

對於

A = [1 2 1 2 3 
    1 3 1 1 1 
    1 3 1 1 2 
    1 2 1 1 3 
    2 3 1 2 1 
    1 3 1 2 2 
    1 3 1 2 3 
    1 3 1 3 2 
    1 3 1 3 1 
    1 3 2 3 1]; 

這給

result = 
    1  2  1  2  3 
    1  3  1  1  1 
    1  3  1  1  2 
    1  3  1  2  3 
    1  3  1  3  1 
相關問題