Вы можете преобразовать его в разреженную матрицу, а затем использовать полную команду, чтобы получить матрицу смежности.
edges= [1 2;
3 4;
3 1
2 3];
n=size(edges,1);
% create sparse matrix with given edges and their reverse direction
A = sparse([edges(:,1); edges(:,2)],[edges(:,2); edges(:,1)],[ones(n,1); ones(n,1)]);
% create adjacency matrix
B=full(A);
% set zeros to inf
B(B==0)=inf;
и это результат:
A =
(2,1) 1
(3,1) 1
(1,2) 1
(3,2) 1
(1,3) 1
(2,3) 1
(4,3) 1
(3,4) 1
>> B
B =
Inf 1 1 Inf
1 Inf 1 Inf
1 1 Inf 1
Inf Inf 1 Inf
Edit: редкие команды создают разреженную матрицу адресации значений ее элементов. Один прототип этой команды выглядит следующим образом:
A=sparse(rows,cols,values);
, например A=sparse([1;2],[1,3],[10,5])
является матрица, которая A(1,1)=10
и A(2,3)=5
и другие элементы равны нулю:
A=sparse([1;2],[1,3],[10,5]);
>> full(A)
ans =
10 0 0
0 0 5
В вашем случае вы должны добавить два направления в разреженной матрица (симметричная) и все значения равны единице. Так что вам нужно построить разреженную матрицу, как:
A = sparse([edges(:,1); edges(:,2)],[edges(:,2); edges(:,1)],[ones(n,1); ones(n,1)]);
полной команды преобразовать разреженную матрицу плотных один.
Просьба уточнить ваш вопрос. Сделайте свой вывод правильными для вас данными * 5 * -by- * 3 *. Объясните, почему точка в вашей матрице будет 'inf' и почему она будет' 1'. Какой формат (тип данных) - ваш вход? Пожалуйста, * ИЗМЕНИТЬ * ваш вопрос, чтобы добавить эти данные. – Dan
Это все еще не ясно. Объясните размеры вашей выходной матрицы, как вы попали в '(inf 1 inf inf inf ... 1)'? Что означают круглые скобки? – Dan
имеется 127 ребер (FID) между сетью точек. Если между двумя точками есть грань, это означает, что существует разгром! поэтому значение этого ребра будет равно 1, и если между двумя точками нет разрыва, то между ними нет ребра. поэтому значение ребра будет inf. –