【问题标题】:How to create Adjacency Matrix for dataset in Matlab?如何在 Matlab 中为数据集创建邻接矩阵?
【发布时间】:2014-09-10 18:27:35
【问题描述】:

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

【问题讨论】:

标签: matlab graph adjacency-matrix


【解决方案1】:

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

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

【讨论】:

  • 这是什么魔法?! :)
【解决方案2】:

欢迎来到 SO!请在how to ask good questions.阅读以下指南

要详细说明@Ankur 的评论,还请查看此Open letter to students with homework problems:“...如果您的问题只是作业问题的复制粘贴,请期待它被否决,关闭并删除 - 可能会在很短的时间内完成。”


你需要做的很简单:

  1. 首先使用M=zeros(6);M(6,6)=0; 预先分配M 矩阵(此选项假定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;

【讨论】:

  • 该链接中的帖子内容丰富且有趣!
【解决方案3】:

我不了解您的矩阵 A,但假设 A 与所寻求的邻接矩阵 M 具有相同的维度,并且您只想将所有零条目保持为“0”,但想要使正条目等于“1”,那么就这样做:

M = (A>0)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    相关资源
    最近更新 更多