Python 平衡加权图
有没有一种算法可以改变多有向图的某个方向,使其权重均匀分布?我知道我们可以通过删除或添加边来改变多有向图的方向,但我不知道应该改变哪条边Python 平衡加权图,python,graph,networkx,osmnx,Python,Graph,Networkx,Osmnx,有没有一种算法可以改变多有向图的某个方向,使其权重均匀分布?我知道我们可以通过删除或添加边来改变多有向图的方向,但我不知道应该改变哪条边 G = ox.graph_from_bbox(north, south, east, west, network_type = 'drive',simplify=True) for u,v,data in G.edges(data=True): data['weight'] = SomeComputation() ev = [data['weight'
G = ox.graph_from_bbox(north, south, east, west, network_type = 'drive',simplify=True)
for u,v,data in G.edges(data=True):
data['weight'] = SomeComputation()
ev = [data['weight'] for _,_,data in G.edges(data=True)]
r = plt.boxplot(ev)
下面是测试的结果
. 但是异常值太多了,至少我希望通过添加或删除图中的边,分布不会有那么多异常值
这就是我添加或删除边的方式
nodes, edges = ox.graph_to_gdfs(G)
oneway = edges[edges.oneway == True]
twoway = edges[edges.oneway == False]
def add_edge(gdf,u,v):
gdf_copy = gdf
index = pd.MultiIndex.from_tuples([(u,v,0)], names=["u", "v","key"])
query = gdf_copy.query("u == "+str(v)+" and v == "+str(u))
df = pd.DataFrame(data=query.values, index=index)
gdf_copy = gdf_copy.append(df)
return gdf_copy
def remove_edge(gdf,u,v):
gdf_copy = gdf
gdf_copy = gdf_copy[~gdf_copy.isin(gdf_copy.query("u == "+str(u)+" and v == "+str(v)))]
gdf_copy = gdf_copy[gdf_copy.length.notna()]
return gdf_copy
list_edge2add = [...] #list of tuple
list_edge2remove = [...] #list of tuple
# applying add_edge() on oneway and remove_edge() on twoway by for looping
gdf = oneway.append(twoway)
# I get new graph
G = ox.graph_from_gdfs(nodes,gdf)
for u,v,data in G.edges(data=True):
data['weight'] = SomeComputation()
ev = [data['weight'] for _,_,data in G.edges(data=True)]
r = plt.boxplot(ev)
问题是,我不知道为了获得更均匀的分布,我应该使用什么样的list_edge2add和list_edge2remove您能提供一个完整的最小可复制代码示例来说明您到目前为止得到的吗?@gboeing我已经添加了我到目前为止得到的代码示例