gpt4 book ai didi

python - 使用 python-igraph 编写带有节点标签的 Pajek 文件

转载 作者:行者123 更新时间:2023-12-01 04:48:38 26 4
gpt4 key购买 nike

我正在使用 igraph 构建图表,并将其写为 Pajek (.net) 文件,以便与其他程序一起使用。 Pajek 文件是用顶点的数字索引而不是顶点标签编写的,因此当我将文件读入其他程序时,标签消失了。

这是一个简单的例子:

>>> g = ig.Graph(vertex_attrs={'label': ['spam', 'eggs', 'ham']}, edges=[(1,0), (1,2)])
>>> g.vs.get_attribute_values('label')
['spam', 'eggs', 'ham']
>>> g.write_pajek('file.net')

$ head file.net
*Vertices 3
*Edges
1 2
2 3

是否可以更改 write_pajek() 的行为以写出标签而不仅仅是索引?

<小时/>

一位好心的同事指出,底层的 igraph C 库 doesn't have写出顶点标签的能力。

解决方法如下:

import igraph as ig
g = ig.Graph(vertex_attrs={'label': ['spam', 'eggs', 'ham']}, edges=[(1,0), (1,2)])
g.write_gml('file.gml')

import networkx as nx
n = nx.read_gml('file.gml')
nx.write_pajek(n, 'nxfile.net')

$ head nxfile.net
*vertices 3
0 0 0.0 0.0 ellipse label spam id 0
1 1 0.0 0.0 ellipse label eggs id 1
2 2 0.0 0.0 ellipse label ham id 2
...
<小时/>

更新

无需解决方法!感谢 Gabor 指出 write_pajek() 使用 id 属性,而不是 label 属性。

>>> g.vs['id'] = g.vs['label'] 
>>> g.write_pajek('igfile.net')

$ head igfile.net
*Vertices 3
1 "spam"
2 "eggs"
3 "ham"
*Edges
1 2
2 3

最佳答案

你的同事很友善,但他还是错了。 :) 要设置的正确属性称为 id:

g = ig.Graph(vertex_attrs={'id': ['spam', 'eggs', 'ham']}, edges=[(1,0), (1,2)])

(我实际上没有在 Python 中尝试过这个,因为我很难安装 python-igraph。但是它在 R 中运行良好,并且它们调用相同的 C 代码,所以我 99% 确定它可以工作也用Python。你能尝试一下吗?)

关于python - 使用 python-igraph 编写带有节点标签的 Pajek 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28879215/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com