На основе комментариев, вы знаете, как получить данные в форму 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
- вместо предварительно выделяя большую нулевую матрицу.
Где эти значения, если они еще не находятся в матрице? Файл? База данных? И что вы подразумеваете под «let MATLAB know», они являются идентификаторами? Как вы собираетесь получать доступ к данным? – wakjah
Он был в файле, но я могу импортировать данные ('filename') и нарезать их в матрицу * 3 на matlab, но я хочу перенести их в матрицу расстояний, например, для кластеризации, в то время как данные 1-го и 2-го D будут только Я бы. – user1830108
ОК. Пока неясно, какова ваша конкретная проблема ... – wakjah