在MATLAB GML文件
40视图(30天)
显示旧的评论
你好,
我想开始在MATLAB图形——我一直寻找.gml格式的数据集。
在文本编辑器中我可以阅读它很好,但我们说的数千个节点/边-有人知道我的程序可以用来转换为MATLAB友好格式呢?我只是想要一个邻接矩阵,我不知道我自己会转换。
谢谢。
尼尔。
0评论
答案(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]矩阵包含所有边缘。
最好的,
马哈茂德
安东尼奥
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;
结束