python networkx 边权重_networkx(Python)中基于边权重排序的相邻边

首先,您应该做一些测试,确保按分数对节点的邻居进行排序是代码中的一个瓶颈。在由典型数据源产生的许多图中,一个节点不太可能有多个邻居。在这种情况下,按分数对邻居进行排序非常便宜,不值得预先计算。在

如果您出于某种原因认为这是不够的,并且必须对节点进行预排序,那么我认为您最好的选择是将networkx.Graph子类化,并为其内部表示图提供自己的映射类型。请注意,这只在networkx的开发版本中有记录,所以这个功能还不能保证是可用的或稳定的。在

有两种方法,第二种更一般,但更复杂。在第一种情况下,我假设您可以控制向图中添加边的顺序,并且可以一次添加所有边。在第二种情况下,我不做这样的假设,但代码会更复杂。在

情况1:按排序顺序插入边

在这种情况下,我假设您可以按照分数增加的顺序插入边。所有需要做的就是为子类提供一个工厂,用于保持边的顺序的邻接映射。collections.OrderedDict可以:import networkx as nx

import collections

class OrderedGraph(nx.Graph):

adjlist_dict_factory = collections.OrderedDict

g = OrderedGraph()

g.add_edge(1, 3, score=17)

g.add_edge(1, 2, score=42)

g.add_edge(1, 4, score=55)

请注意,边是根据分数按递增顺序添加的!如果我们写下:

^{pr2}$

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值