2015-11-07 77 views
0

我有一個30000行的矩陣A和具有相同行號的單元格B。我想刪除重複的行。如果它只是一個矩陣A,我可以使用唯一的函數。但是對於A(矩陣)和B(單元),我該如何繼續?非常感謝!在MATLAB中一起刪除矩陣和單元格的重複行

A和B的例子如下所示。第4行和第5行是重複的(對於A和B),而第5行和第6行不應該被視爲重複。

一個

1 2 3 4 
11 12 13 14 
21 22 23 24 
31 32 33 34 
31 32 33 34 
31 32 33 34 
41 42 43 44 

a 
b 
c 
d 
d 
e 
f 

回答

3

可以與第二返回值從unique做到這一點:

[C,ia,ic] = unique(A,'rows',setOrder) 

ia給你的索引到的唯一行A 。如果你這樣做你的矩陣A,您可以:

>> [~,iA,~] = unique(A,'rows','first') 
iA = 

    1 
    2 
    3 
    4 
    7 

(我用的選項'first'因爲它似乎更自然地我回行4比5行,如果你願意的話,可以使用默認'last', 。只要你保持一致)

由於B是一個單元陣列,你不需要'rows'選項:

>> [~,iB,~] = unique(B,'first') 
iB = 

    1 
    2 
    3 
    4 
    6 
    7 

這就告訴我們,儘管什麼矩陣A訴說發給我們,第4行從6行都是唯一的。如果我們取這兩者的並集,我們得到:

>> uAB = union(iA,iB) 
uAB = 

    1 
    2 
    3 
    4 
    6 
    7 

現在你應該有全部的唯一行的索引:

>> A(uAB,:) 
ans = 

    1 2 3 4 
    11 12 13 14 
    21 22 23 24 
    31 32 33 34 
    31 32 33 34 
    41 42 43 44 

>> B(uAB) 
ans = 
{ 
    [1,1] = a 
    [2,1] = b 
    [3,1] = c 
    [4,1] = d 
    [5,1] = e 
    [6,1] = f 
} 
+0

好的方法! –

+0

感謝@LuisMendo,您的評論讓我再次看到我的答案,並意識到我已經爲'iB'輸入了錯誤的代碼。我現在要解決這個問題。 – beaker

+0

我明白了。我沒有意識到 –

相關問題