【问题标题】: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:“...如果您的问题只是作业问题的复制粘贴,请期待它被否决,关闭并删除 - 可能会在很短的时间内完成。”
你需要做的很简单:
- 首先使用
M=zeros(6); 或M(6,6)=0; 预先分配M 矩阵(此选项假定M 不存在)。
- 接下来您应该注意的是 MATLAB 使用“基于 1 的索引”,这意味着您不能按原样使用
A 中的索引,您首先需要将它们增加 1。李>
- 增加索引后,我们看到
"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 的评论中所指出的,这是一个“如何修改已知位置的矩阵值的问题。它实际上并不涉及邻接......”