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=WEAK
和mode=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