2013-05-31 3 views
0

Я довольно новичок в Matlab, теперь я хочу использовать matlab для выполнения кластерной работы. , если у меня есть 3 колонки значениякак перенести значение попарного расстояния в матрицу расстояний

id1 id2 distvalue1

id1 id3 distvalue2 ....

id2 id4 distvalue I .....

5000 Идентификаторы в общей сложности, но некоторые пары идентификаторов пропускают значение расстояния в python. Я могу создать циклы, чтобы импортировать это значение расстояния в матричную форму. Как я могу это сделать в Matlab? , а также пусть Matlab знает идентификаторы id1, ... idx, а третий столбец - значение

Спасибо!

+1

Где эти значения, если они еще не находятся в матрице? Файл? База данных? И что вы подразумеваете под «let MATLAB know», они являются идентификаторами? Как вы собираетесь получать доступ к данным? – wakjah

+0

Он был в файле, но я могу импортировать данные ('filename') и нарезать их в матрицу * 3 на matlab, но я хочу перенести их в матрицу расстояний, например, для кластеризации, в то время как данные 1-го и 2-го D будут только Я бы. – user1830108

+0

ОК. Пока неясно, какова ваша конкретная проблема ... – wakjah

ответ

0

На основе комментариев, вы знаете, как получить данные в форму N х 3 матрицы, которая называется X, где X(:,1) является первым индексом, X(:,2) является вторым индексом, и X(:,3) является соответствующим расстоянием.

Предположим, что индексы (id1 ... idx) - это произвольные числовые метки.

Итак, мы можем сделать следующее:

% First, build a list of all the unique indices  
indx = unique([X(:,1); X(:,2)]); 
Nindx = length(indx); 

% Second, initialize an empty connection matrix, C 
C = zeros(Nindx, Nindx); %or you could use NaN(Nindx, Nindx) 

% Third, loop over the rows of X, and map them to points in the matrix C 
for n = 1:size(X,1) 
    row = find(X(n,1) == indx); 
    col = find(X(n,2) == indx); 
    C(row,col) = X(n,3); 
end 

Это не самый эффективный метод (который был бы переназначить индексы X в диапазон [1 ... NINDX] в векторизованных образом), но это должно быть хорошо для 5000 идентификаторов.

Если вы в конечном итоге имеете дело с очень большим количеством уникальных индексов, для которых только очень немногие из пар индексов назначили значения расстояния, тогда вы можете посмотреть на использование разреженных матриц - попробуйте help sparse - вместо предварительно выделяя большую нулевую матрицу.

+0

Да! Я думаю, что это очень полезно! Большое спасибо! – user1830108

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