获得python-igraph

时间:2015-04-23 23:47:46

标签: python graph-theory igraph directed-graph

我的问题可能听起来很愚蠢,但我怎样才能获得有向图的邻接矩阵?

让我解释一下。我有以下代码:

g = Graph()
g.add_vertices(5)
g.add_edges([(0,1),(1,2)])
print(g)
print(g.get_adjacency())

第一次打印返回:

IGRAPH U--- 5 2 --
+ edges:
0--1 1--2

第二个回归:

[[0, 1, 0, 0, 0]
 [1, 0, 1, 0, 0]
 [0, 1, 0, 0, 0]
 [0, 0, 0, 0, 0]
 [0, 0, 0, 0, 0]]

如果我希望我的图表是直接的而不是无向的,该怎么办?

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

在开始为其添加边缘之前,您需要按照指示初始化图表:

gd = Graph(directed=True)
gd.add_vertices(5)
gd.add_edges([(0,1),(1,2)])
print(gd.get_adjacency())
# [[0, 1, 0, 0, 0]
#  [0, 0, 1, 0, 0]
#  [0, 0, 0, 0, 0]
#  [0, 0, 0, 0, 0]
#  [0, 0, 0, 0, 0]]

马修提到的.to_directed()方法无法做到你想要的,因为它为每个无向边创造了两个方向的边缘:

print(g.is_directed())    # your original undirected example graph
# False

g.to_directed()

print(g.is_directed())
# True

print(g.get_adjacency())  # adjacency matrix is still symmetric
# [[0, 1, 0, 0, 0]
#  [1, 0, 1, 0, 0]
#  [0, 1, 0, 0, 0]
#  [0, 0, 0, 0, 0]
#  [0, 0, 0, 0, 0]]

您可以通过传递.to_directed(mutual=False)来防止创建两个有向边,但在这种情况下,igraph只为每条边选择一个任意的单向。根本问题在于,如果图形是无向的,则不会存储有关边缘方向的信息。