python-igraph:无法分解有向图(既不STRONG也不弱)

使用python-igraph 0.7.1(Python 3.4.8),我想将有向图分解为所有未连接的子图。然而,g.decompose(mode=WEAK)失败:python-igraph:无法分解有向图(既不STRONG也不弱)

igraph._igraph.InternalError: Error at components.c:469: only 'IGRAPH_WEAK' is implemented, Invalid value 

由于错误信息和谷歌(例如click)告诉我,STRONG分解不落实,因此预计将失败,但是WEAK分解应该工作。那么,它不适合我!

这里有一个小例子:

from igraph import Graph, WEAK 

g = Graph(directed=True)

g.add_vertices(4)

g.add_edges([(0, 1), (2, 3)])

g.decompose(mode=WEAK) # <= FAILS!

我试过mode="weak"mode="WEAK"mode=WEAKmode=1,始终得到同样的错误。

是否有解决方法,即一组其他命令导致相同的结果?(请注意,我不是很熟悉,图论,所以我可能会错过一些在这方面明显的。)

回答:

是否有可能解决方法,即一组导致同样的结果一些其他的命令?

事实上,我发现,似乎工作解决方法:

from igraph import graph, WEAK 

g = Graph(directed=True)

g.add_vertices(6)

g.vs["ts"] = [0, 1, 2, 3, 1, 2] # timesteps

g.add_edges([(0, 1), (1, 2), (2, 3), (4, 5)])

# sgs = g.decompose(mode=WEAK) # fails!

#< workaround

g.to_undirected() # we won't need 'g' anymore afterwards

sgs = g.decompose(mode=WEAK)

for sg in sgs:

sg.to_directed(mutual=True)

es_del = sg.es.select(lambda e: e.graph.vs[e.source]["ts"] > e.graph.vs[e.target]["ts"])

sg.delete_edges(es_del)

#>

我原来有向图转换为一个单一方向的图中可以分解成子图,将所有子图回用有向图沿两个方向的边缘,并删除指向错误方向的所有边缘。当然,如果应该保留原始图,我们应该首先复制它(或者在分解后将其转换回有向图)。

警告:请注意,将有向图转换为无向时,边属性似乎会丢失!据我所见,他们需要手动恢复(至少这就是我所做的)。

以上是 python-igraph:无法分解有向图(既不STRONG也不弱) 的全部内容, 来源链接: utcz.com/qa/258469.html

回到顶部