У меня есть список триад (vertex1, vertex2, weight), представляющих ребра взвешенного ориентированного графа.Поскольку реализация прототипа происходит в Matlab, они импортируются как матрица Nx3, где N - число ребер.Таким образом, наивная реализация этого
id1 = L(:,1);
id2 = L(:,2);
weight = L(:,3);
m = max(max(id1, id2)) % to find the necessary size
V = zeros(m,m)
for i=1:m
V(id1(i),id2(i)) = weight(i)
end
Проблема с трибулой заключается в том, что «id1» и «id2» не являются последовательными;это коды.Это дает мне три проблемы.(1) Огромные матрицы со слишком большим количеством «фантомных», ложных вершин, которые искажают результаты алгоритмов, которые будут использоваться с этой матрицей, и (2) мне нужно восстановить коды в результатах этих алгоритмов (достаточно сказать, что этобыть тривиальным, если идентификационные коды последовательны 1: m).
Ответы в Matlab предпочтительнее, но я думаю, что могу вернуться к ответам на других языках (если они не являются предварительно упакованными решениямивроде "R имеет библиотеку, которая делает это").
Я новичок в StackOverflow и надеюсь, что скоро внесу весомый вклад в сообщество.В настоящее время, спасибо заранее!
Редактировать: Это было бы решением, если бы у нас не было вершин в начале нескольких вершин.(Это подразумевает совпадение 1: 1 между списком происхождения ребер и списком идентичностей)
for i=1:n
for j=1:n
if id1(i) >0 & i2(j) > 0
V(i,j) = weight(i);
end
end
end