2013-05-21 4 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, и мне нужно включить их в функцию intorpolation.

Я думал, что в чем-то вроде

, если значение выходного столбца равно другое значение того же столбца, проверьте значение входов все же, используя, 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

отличный человек, здесь хорошо. большое спасибо! –

Смежные вопросы