2016-09-13 1 views
0

Предположим, у меня есть матрица ssout (10x14)Matching и удаление строк в матрице

1.15740740740741e-17 1.15740740740741e-18 1.50000000000000e-06 0.990000000000000 0.0900000000000000 3.45000000000000 1.10000000000000 1 2.04312609959835 1.41286525344677e-17 7.06432620699426e-18 0.0100000000000000 10000 0.00100000000000000 
1.15740740740741e-17 1.15740740740741e-18 1.50000000000000e-06 0.990000000000000 0.0900000000000000 3.45000000000000 1.10000000000000 1 2.04246490864522 1.41286525344677e-17 7.06432620699426e-18 0.0100000000000000 10000 0.0100000000000000 
1.15740740740741e-17 1.15740740740741e-18 1.50000000000000e-06 0.990000000000000 0.0900000000000000 3.45000000000000 1.10000000000000 1 2.04286618115584 1.41286525344677e-17 7.06432620699426e-18 0.0100000000000000 10000 0.100000000000000 
1.15740740740741e-17 1.15740740740741e-18 1.50000000000000e-06 0.990000000000000 0.0900000000000000 3.45000000000000 1.10000000000000 1 2.04104656008947 1.41286525344677e-17 7.06432620699426e-18 0.0100000000000000 100000 0.00100000000000000 
1.15740740740741e-17 1.15740740740741e-18 6.00000000000000e-06 0.990000000000000 0.0900000000000000 3.45000000000000 1.10000000000000 1 1.99946261970354 9.04233762205933e-16 4.52116877247632e-16 0.0100000000000000 100000 0.00100000000000000 
1.15740740740741e-17 1.15740740740741e-18 1.25000000000000e-05 0.990000000000000 0.0900000000000000 3.45000000000000 1.10000000000000 1 1.86355987378850 8.17630355003923e-15 4.08815174015873e-15 0.0100000000000000 100000 0.00100000000000000 
1.15740740740741e-17 1.15740740740741e-18 1.50000000000000e-06 0.990000000000000 0.0900000000000000 3.45000000000000 1.10000000000000 1 2.04723993665275 1.41286525344677e-17 7.06432620699426e-18 0.0100000000000000 100000 0.0100000000000000 
1.15740740740741e-17 1.15740740740741e-18 6.00000000000000e-06 0.990000000000000 0.0900000000000000 3.45000000000000 1.10000000000000 1 1.99903967606786 9.04233762205933e-16 4.52116877247632e-16 0.0100000000000000 100000 0.0100000000000000 
1.15740740740741e-17 1.15740740740741e-18 1.25000000000000e-05 0.990000000000000 0.0900000000000000 3.45000000000000 1.10000000000000 1 1.86368041811290 8.17630355003923e-15 4.08815174015873e-15 0.0100000000000000 100000 0.0100000000000000 
1.15740740740741e-17 1.15740740740741e-18 1.50000000000000e-06 0.990000000000000 0.0900000000000000 3.45000000000000 1.10000000000000 1 2.04266773220586 1.41286525344677e-17 7.06432620699426e-18 0.0100000000000000 100000 0.100000000000000 

Я хочу уточнить эту матрицу, устранив те строки, которые не имеют никаких других подобных строк соответствие. Критерии здесь состоят в том, что две строки совпадают, если столбец [1: 2 4: 8 12:14] этих двух строк одинаковый. Для любой из строк мы удаляем ее, если нет других строк, которые соответствуют ей в соответствии с нашими критериями.

У меня есть код, как этот

ssout = sout; 
rows = size(sout,1); 
rowss = size(ssout,1); 
c1 = 1:2 
c2 = 4:8 
c3 = 12:14 
cout = 0 

for i = 1: rows; 
    for j = 1: rows-1; 

     if isequal(sout(i,[c1 c2 c3]),ssout(j,[c1 c2 c3])); 
      [i j] 
      cout = cout +1 %increase cout each time it finds a match to row i 
     end 
     if cout < 2;%included comparison it to itself 
      sout(i,:) = []; 
      cout = 0; %reset cout to 0  
      rows = size(sout,1); %update rows 
     end 

    end 

end 

Я знаю, что-то не так, но не знаете, как заставить его работать еще. Любая помощь будет оценена!

+1

Вы можете использовать функцию 'unique' с опцией' rows' на 'ssout (:, [1: 2 4: 8 12:14])', чтобы получить индексы всех уникальных строк, а затем используйте индексы, чтобы получить только те строки. –

ответ

0

Может быть гораздо проще использовать unique, чтобы определить, какие строки должны быть включены в результат, а не удалять строки, похожие. Пример:

[~ , idx] = unique(ssout(:,[1:2 4:8 12:14]),'rows') % Find index of all unique rows 
ssout_filtered = ssout(idx,:); 
+0

Спасибо большое! Не знал, что есть «уникальная» функция. Еще один быстрый вопрос, я пытаюсь отсортировать окончательную матрицу ssout_filtered с помощью «ssout_filtered = sortrows (ssout_filtered, [1 2 4 5 6 7 12 13 14 3])». Он не сортировал колонку 14, как я и требовал. Вместо этого он сортирует столбец 3. Есть ли что-то не так? – Orangeblue

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

  • Нет связанных вопросов^_^