如何从输入数据集图形文件构造邻接矩阵,该文件具有以下数据:
数据集文件的第一行表示节点数和边数。 以下行表示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函数的帮助,该函数可以读取文件并从数据集文件
构建邻接矩阵
答案 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
。