0

我在像这样的单元格数组中声明了一组输入和一个输出:

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' }

其中第一列是输出,其余的是每个输出使用的输入。

我需要比较这些值以减少计算时间。所以,问题是,对于等于输出,我想知道输入是否相同,这是一个重要的说明.. 值的顺序没有变化,所以,当比较 fcb 和 fbc 时,它是相同的。

我需要这个,因为实际上,我的数据集是一个 5040 x 7 单元格数组,我需要将它们放入一个插值函数中。

我想像

如果输出列的值等于同一列的另一个值,则使用 ismember 函数检查输入的值是否都相同。但我无法找到有效的代码。

请问有什么帮助吗?

4

1 回答 1

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包含 的唯一行Bii包含唯一行的索引,并根据其具有的唯一值jj标记每一行。B

如果您想从 中过滤掉所有重复的行A,您现在可以执行

Afiltered = A(ii, :);

这导致:

Afiltered = 
    'a'    'f'    'b'    'c'
    'b'    'f'    'a'    'c'
    'c'    'f'    'a'    'b'
于 2013-05-21T13:38:18.497 回答