Как создать матрицу смежности для набора данных в Matlab?

Я новый пользователь Matlab, и мне нужна помощь в создании матрицы смежности из набора данных. набор данных находится в следующем шаблоне

A=[   
0 1    
0 2    
0 5    
1 2    
1 3    
1 4    
2 3    
2 5    
3 1    
3 4    
3 5    
4 0    
4 2    
5 2    
5 4    
];

матрица смежности выше будет

M=    0 1 1 0 0 1
      0 0 1 1 1 0
      0 0 0 1 0 1
      0 1 0 0 1 1
      1 0 1 0 0 0
      0 0 1 0 1 0

мне нужен код для выполнения вышеуказанной задачи в Matlab


person Usman Raza    schedule 10.09.2014    source источник
comment
Пожалуйста, покажите свои усилия. Пожалуйста, без домашнего задания   -  person Ankur Aggarwal    schedule 10.09.2014
comment
На самом деле это проблема как изменить значения матрицы в известных позициях. На самом деле это не связано с соседством ...   -  person Dev-iL    schedule 10.09.2014


Ответы (3)


Вы можете использовать sparse. Пожалуйста, взгляните на эту функцию, попробуйте свою проблему, а затем проверьте, наведя указатель мыши на следующий прямоугольник:

full(sparse(A(:,1)+1, A(:,2)+1, 1))

person Luis Mendo    schedule 10.09.2014
comment
Что это за колдовство?! :) - person Dev-iL; 10.09.2014

Добро пожаловать в СО! Прочтите следующее руководство о том, как задавать хорошие вопросы.

Чтобы уточнить комментарий @Ankur, ознакомьтесь также с этим открытым письмом учащимся, у которых возникли проблемы с домашним заданием: "...Если ваш вопрос представляет собой просто копию проблемы с домашним заданием, ожидайте, что за него проголосуют, закроют и удалят - возможно, в довольно короткие сроки."


То, что вам нужно сделать, довольно просто:

  1. Сначала вы предварительно выделяете матрицу M, используя либо M=zeros(6);, либо M(6,6)=0; (эта опция предполагает, что M не существует).
  2. Следующее, что вы должны отметить, это то, что MATLAB использует «индексирование на основе 1», что означает, что вы не можете использовать индексы в A как есть, и вам сначала нужно увеличить их на 1.
  3. После увеличения индексов мы видим, что "A+1" содержит координаты M, в которых должно быть 1 (я заметил, что матрица смежности в вашем случае асимметрична). Отсюда нужно получить доступ к правильным ячейкам, и это можно сделать с помощью sub2ind(...) .

Наконец, код для генерации M:

M=zeros(6);
M(sub2ind(size(M), A(:,1)+1, A(:,2)+1))=1;
person Dev-iL    schedule 10.09.2014
comment
Познавательно и интересно тот пост по той ссылке! - person Divakar; 10.09.2014

Я не понимаю вашу матрицу A, но предположим, что A имеет те же размеры, что и искомая матрица смежности M, и что вы просто хотите сохранить все нулевые элементы как «0», но хотите сделать положительные элементы равными "1", тогда просто выполните:

M = (A>0)

Как указано в комментарии @Dev-iL выше, это "проблема изменения значений матрицы в известных позициях. На самом деле это не связано со смежностью..."

person Seb    schedule 25.11.2014