2013-02-23 2 views
1

Рассмотрим обр 2 одномерный массив,Comparision в одном массиве в MATLAB

  col1 col2 col3 
    row1 12  1  6 
    row2 30  21  10 
    row3 91  39  40 
    row4 76  1  70 
    row5 30  21  10 

я хочу, чтобы сравнить между рядами, чтобы получить вхождение каждой строки так тат значения col1,2,3 все же для другой также .. так в выше значения являются вхождение,

for row1 it is 1,for row2 = 2,row3 = 1,row4 = 1,row5 =2 .. 
    in above row2 and row5 occur twice having same col values.. 

Я реализовал код и им получать выход также, но проблема в том, им с почти 50 тысяч строк, поэтому она занимает 5 минут, чтобы compute..i хотите, чтобы метод или код tat вычислялся быстрее .. Это мой код

for i=1:n 
    for j=i+1:n 
    if((ar(i,1)==ar(j,1))&& (ar(i,2)== ar(j,2)) && (ar(i,3)==ar(j,3))) 
    //stores occurances in index position 4  
     ar(i,4)=ar(i,4)+1; 
     ar(j,4)=ar(j,4)+1; 
    end 
    end 
end 
+0

Вам понадобится HashTable? Каков диапазон значений в таблице? Малый int? – qPCR4vir

+0

Использование HashTable делает его более сложным, я думаю, что ... и диапазон от 0 до 255 .. – user2102112

ответ

0

Вариант 1: карта каждой строки в единое целое

каждый элемент представляет собой байт, так что каждая строка может быть однозначно отображается в 3 байта.

ar = 2.^ar; 
ar = ar(:, 1) + 256 * ar(:, 2) + 256^2 * ar(:, 3); 

будет преобразовывать ваш стол в одну колонку, а затем использовать hist.

Вариант 2: использование containers.Map

Это MatLab хеш-таблицы (поддерживается только для последних версий). Сначала вам нужно преобразовать каждую строку в строку.

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