gpt4 book ai didi

Python 网络 x : edge contraction

转载 作者:太空狗 更新时间:2023-10-30 00:03:24 26 4
gpt4 key购买 nike

我有一个 NetworkX图形。我想知道怎么做edge contraction多个节点之间。

例如,如果我想收缩 X、Y 和 Z:

         _ node A _
_/ | \_
node X --- node Y --- node Z

会变成

           node A 
|
node XYZ (or whatever X/Y/Z)

图形创建不是问题。有用。我想通过合并具有相同“含义”的节点来减少图形:我称之为“end lvl”(节点名称长度等于 7)并且链接在一起的节点。

我在NetworkX中找到了压缩功能,所以我尝试使用它:

# edge contraction for same nodes
# for each node, get the links to other nodes "end lvl"
# if there is such a link, it means that these node are
# the sames
#
# copy graph
I = G
for n,d in G.nodes(data=True):
if n in I.nodes():
if len(n) == 7:
# list of nodes adjacent to n : filter only "end lvl" nodes
neighbors = [ node for node in I.neighbors(n) if len(node) == 7 ]
nodes_to_merges = neighbors.append(n)
I = nx.condensation(I,scc=nodes_to_merges)

当我转换为 JSON 时得到的是:

{"directed": true, "graph": [], "nodes": [{"id": 0}], "links": [], "multigraph": false}

如您所见,存在问题...

对函数的引用是here .

最佳答案

怎么样:

add_node(XYZ)
add_edge(XYZ, A)
for edge incident on (X, Y, Z):
v = nodes in edge not in (X, Y, Z, A)
if v:
remove_edge(edge)
add_edge(v, XYZ)
for node in (X, Y, Z):
remove_node(node)

关于Python 网络 x : edge contraction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15640972/

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