2013-05-21 135 views
0

我有一組輸入,把在單元陣列一樣,聲明一個輸出:Matlab - 如何比較單元格數組中的值?

A = {'a', 'f', 'c', 'b'; 
    'b', 'f', 'c', 'a'; 
    'a', 'f', 'b', 'c'; 
    'c', 'f', 'b', 'a'; 
    'c', 'f', 'a', 'b'; 
    'b', 'f', 'a', 'c' } 

其中第一列是一個輸出,其餘的是所使用的輸入,每個輸出。

我需要比較這些值以減少計算時間。 所以,對於平等產出,我想知道輸入是否相同,重要的一點是,價值的順序不會變化,因此,當比較f c b和f b c時,它是相同的。

我需要這個,因爲acttualy,我的數據集是一個5040 x 7單元陣列,我需要將它們放入一個內推函數中。

我想在像

如果輸出列的值是等於同一列的另一個值,檢查是否輸入的值都是相同的,使用,ismember功能。 但我不能到達一個有效的代碼。

請幫忙嗎?

+0

你想要什麼結果來實現呢?你想刪除所有重複的輸入/輸出對,還是隻想要一個列表告訴你重複的位置? –

+0

我想做的就是你做的,非常感謝! –

回答

0

首先,既然你不關心的輸入的順序,我會整理各行:

[T, N] = size(A); 
for t = 1:T 
    Asorted(t,1) = A(t,1); 
    Asorted(t,2:N) = sort(A(t,2:N)); 
end 

現在要找到所有的重複行。一個簡單的方法做,這是首先要轉換爲字符數組,並使用unique功能 -

B = cell2mat(Asorted); 
[C, ii, jj] = unique(B,'rows'); 

現在C包含B中的唯一行,ii包含唯一行的索引和jj標籤每個B的行取決於它具有的唯一值。

如果你想從A過濾掉所有重複行的,你現在可以做

Afiltered = A(ii, :); 

這導致:

Afiltered = 
    'a' 'f' 'b' 'c' 
    'b' 'f' 'a' 'c' 
    'c' 'f' 'a' 'b' 
+0

偉大的人,它在這裏工作得很好。非常感謝! –