在networkx python中使用add\u edges\u from时缺少边

2024-05-07 02:00:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dict,边是两元组格式的,它们的值我想添加到网络xgraph

mydict看起来像下面打印的内容:

#print(mydict)
{('StopPoint:59:3786294', 'StopPoint:59:3730342'): {'time_tc': 120.0},
 ('StopPoint:59:3730342', 'StopPoint:59:4255013'): {'time_tc': 60.0},
 ('StopPoint:59:4255013', 'StopPoint:59:3786297'): {'time_tc': 120.0},
 ('StopPoint:59:3786297', 'StopPoint:59:3786298'): {'time_tc': 180.0},
 ('StopPoint:59:3786298', 'StopPoint:59:3786299'): {'time_tc': 60.0}, ...}

#len(mydict) = 233116

我注意到在使用G.add_edges_from(mydict)len(G.edges)=123976)之后,我丢失了将近100000条边。当我绘制G时,这一点也很明显,因为许多节点没有用边链接在一起。下面是G.edges的样子:

#print(G.edges)
{('StopPoint:93:1184', 'StopPoint:93:1260'): {'time_tc': 180.0},
 ('StopPoint:93:1184', 'StopPoint:55:79'): {'time_map': 126},
 ('StopPoint:93:1184', 'StopPoint:55:80'): {'time_map': 126},
 ('StopPoint:93:1184', 'StopPoint:8711610:800:P'): {'time_map': 336},
 ('StopPoint:93:1184', 'StopPoint:93:1183'): {'time_map': 252}}, ...}

#len(G.edges) = 123976

mydict中不应该有任何重复,所以我不明白为什么边的总和没有添加到图中。有人知道吗


Tags: from网络addmap内容lentime格式
1条回答
网友
1楼 · 发布于 2024-05-07 02:00:06

这是因为mydict变量同时包含(x,y)(y,x)。如果构建networkx.Graph(而不是networkx.DiGraph),那么(x,y)被认为与(y,x)相同。示例:

import networkx as nx
mydict = {(3,4): 5, (4,3): 6, (1,2): 6}
g = nx.Graph()
di_g = nx.DiGraph()
g.add_edges_from(mydict)
di_g.add_edges_from(mydict)
print(g.edges) # [(3, 4), (1, 2)]
print(di_g.edges) # [(3, 4), (4, 3), (1, 2)]

您可以构建一个DiGraph或者从mydict中删除double(这实际上取决于您的具体需要)。要从mydict中提取所有双精度,只需执行以下操作:

doubles = set(frozenset(k) for k in mydict if (k[1], k[0]) in mydict)

相关问题 更多 >