2013-05-21 106 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

伟大的人,它在这里工作得很好。非常感谢! –