使用matlab编辑器从输入数据集图形文件构造邻接矩阵

时间:2014-10-06 08:27:48

标签: matlab graph

如何从输入数据集图形文件构造邻接矩阵,该文件具有以下数据:

  

数据集文件的第一行表示节点数和边数。   以下行表示node1和node2,表示它们之间存在边   例如:amazon.graph数据集文件包含以下内容

以下是amazon.graph文件 4 6 //节点数和边数
0 1 //节点0和1之间的边缘 1 3
2 3
1 2
0 2
0 3

  

此数据包含在名为“amazon.graph”的文件中。我需要一个matlab函数的帮助,该函数可以读取文件并从数据集文件

构建邻接矩阵

1 个答案:

答案 0 :(得分:2)

使用sparse构建矩阵:

x = [4 6
     0 1
     1 3
     2 3
     1 2
     0 2
     0 3]; %// data

adjMatrix = sparse(x(2:end,1)+1, x(2:end,2)+1, 1, x(1,1), x(1,2));

这会产生稀疏矩阵。如果需要,您可以转换为完整格式:

adjMatrix = full(adjMatrix);

在你的例子中,这给出了

adjMatrix =

     0     1     1     1     0     0
     0     0     1     1     0     0
     0     0     0     1     0     0
     0     0     0     0     0     0

使图形对称(无向):

s = max(x(1,1), x(1,2)); %// take largest dimemsion
adjMatrix = sparse(x(2:end,1)+1, x(2:end,2)+1, 1, s, s); %// now matrix is square
adjMatrix = adjMatrix | adjMatrix.'; %'// apply "or" with transpose to make symmetric
adjMatrix = full(adjMatrix); %// convert to full if needed

如果您在文件中包含数据,则可以使用textread将其读入变量x。例如,如果文件data.txt包含文本

4     6
0     1
1     3
2     3
1     2
0     2
0     3

只需使用

x = textread('data.txt');

然后,您可以应用上述内容从adjMatrix生成x