如何在Matlab中为数据集创建Adjacency Matrix?

时间:2014-09-10 18:27:36

标签: matlab graph adjacency-matrix

我是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中执行上述任务

3 个答案:

答案 0 :(得分:1)

欢迎来到SO!请阅读how to ask good questions.

上的以下指南

要详细说明@Ankur的评论,请同时查看 Open letter to students with homework problems :" ...如果您的问题只是复制粘贴作业问题,期望它被低估,关闭和删除 - 可能在很短的时间内。"


你需要做的很简单:

  1. 首先,您使用MM=zeros(6);预先分配M(6,6)=0;矩阵(此选项假定M不存在)。
  2. 接下来你应该注意的是,MATLAB使用基于" 1的索引",这意味着你不能按原样使用A中的索引,而你首先需要将它们递增1
  3. 在递增索引之后,我们看到"A+1"包含M的坐标,其中应该有1(我注意到邻接矩阵在您的情况下是不对称的)。从这里开始访问正确的单元格,可以使用sub2ind(...)来完成。
  4. 最后,生成M的代码是:

    M=zeros(6);
    M(sub2ind(size(M), A(:,1)+1, A(:,2)+1))=1;
    

答案 1 :(得分:1)

您可以使用sparse。请查看该功能,尝试一下您的问题,然后将鼠标悬停在以下矩形上进行检查:

  

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

答案 2 :(得分:0)

我不理解你的矩阵A,但是假设A与所寻找的邻接矩阵M具有相同的维度,并且你只想将所有零条目保持为“0”,但是想要使其成为正数条目等于“1”,然后只做:

M = (A>0)

正如上面@ Dev-iL的评论所指出的,这是一个“如何在已知位置修改矩阵值的问题。它实际上并不涉及邻接......”