在MATLAB GML文件

40视图(30天)
尼尔。
尼尔。 2011年9月7日
编辑: 亚历山大Kocian2021年10月6日
你好,
我想开始在MATLAB图形——我一直寻找.gml格式的数据集。
在文本编辑器中我可以阅读它很好,但我们说的数千个节点/边-有人知道我的程序可以用来转换为MATLAB友好格式呢?我只是想要一个邻接矩阵,我不知道我自己会转换。
这里是一个链接到一个小例子的文件我所说的: http://www-personal.umich.edu/ mejn / netdata / dolphins.zip
谢谢。
尼尔。

答案(4)

沃尔特·罗伯森
沃尔特·罗伯森 2020年3月18日
S = fileread (“dolphins.gml”);
节点= regexp(年代,“节点。* ?id (? < id > \ d +)。* ?标签\ s *”(? <标记> [^]*)”,“名字”);
边缘= regexp(年代,“边缘。* ?来源\ s *(? <源> \ d +)。* ?目标\ s *(? <目标> \ d +) ',“名字”);
all_ids = {nodes.id};
all_names = {nodes.label};
all_sources = {edges.source};
all_targets = {edges.target};
[source_found s] = ismember (all_sources all_ids);
nfidx =找到(~ source_found);
如果~ isempty (nfidx)
错误(的源id在节点列表中没有发现,从“% s”边(nfidx (1) .source));
结束
[target_found t] = ismember (all_targets all_ids);
nfidx =找到(~ target_found);
如果~ isempty (nfidx)
错误(的目标id在节点列表中没有发现,从“% s”边(nfidx (1) .target));
结束
EdgeTable =表([s。”,t。'],(长度(s), 1),“VariableNames”,{“EndNodes”“重量”});
NodeTable =表(all_names。’,“VariableNames”,{“名字”});
图G = (EdgeTable NodeTable);
情节(G);
4评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年1月14日
节点= regexp(年代,节点。* ?id (? < id > \ d +)。* ?标签\ s *”(? <标记> [^]*)”,“名字”);
可以扩展解析使用相同的纬度和经度。* ?关键字\ s *(<标记> \ s +)格式。

登录置评。


马哈茂德
马哈茂德 2012年4月28日
您可以使用下面的天真的代码从图像中提取边缘,把它们放在一个矩阵可以很容易地更改为邻接矩阵。
从gml文件%提取边缘图
文件名=“dolphins.gml”;
inputfile = fopen(文件名);
一个= [];
l = 0;
k = 1;
1
%得到一条线从输入文件
tline = fgetl (inputfile);
如果文件结束%辞职
如果~ ischar (tline)
打破
结束
num = regexp (tline,“\ d +”,“匹配”);
如果长度(num)
如果l = = 1
l = 0;
(k, 2) = str2num (num {1});
k = k + 1;
继续;
结束
(k - 1) = str2num (num {1});
l = 1;
其他的
l = 0;
继续;
结束
结束
[]是[m x 2]矩阵包含所有边缘。
最好的,
马哈茂德
5个评论
沃尔特·罗伯森
沃尔特·罗伯森 2020年3月18日
看我的(新)回答,图的节点id和标签和边缘信息,并构建一个完整的图形对象。

登录置评。


安东尼奥
安东尼奥 2014年2月4日
编辑:沃尔特·罗伯森 2020年3月18日
函数G = importgml(文件名)
inputfile = fopen(文件名);
一个= [];
l = 0;k = 1;1
%得到一条线从输入文件
tline = fgetl (inputfile);
如果文件结束%辞职
如果~ ischar (tline)
打破
结束
num = regexp (tline,“\ d +”,“匹配”);%得到数字的字符串
如果长度(num)
如果l = = 1
l = 0;
(k, 2) = str2num (num {1});
k = k + 1;
继续;
结束
(k - 1) = str2num (num {1});
l = 1;
其他的
l = 0;
继续;
结束
结束
G = [];
i = 1:长度(A)
G((我,1)+ 1,(我,2)+ 1)= 1;
结束
3评论
亚历山大Kocian
亚历山大Kocian 2021年10月6日
编辑:亚历山大Kocian 2021年10月6日
@hossein:这是只适用于无向图

登录置评。


默罕默德·巴特
默罕默德·巴特 2018年2月2日
我怎样才能将邻接矩阵转换成.gml文件

类别

找到更多的在指示图帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!