首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用最大权重NetworkX图保留10%的分支

使用最大权重NetworkX图保留10%的分支
EN

Stack Overflow用户
提问于 2016-06-11 12:39:17
回答 1查看 161关注 0票数 1

我有图和计数的网络密度,现在我应该只保留具有最大重量的分支(网络密度的前10%,例如从200到20个最大权重的20个分支)。我找不到该怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-11 16:23:57

这个问题有点混乱,所以如果稍后有更多资料出现,我很乐意修改答覆。

我有图表和网络密度,

其中我假设你有一个没有方向的(?)加权网络因此,计算网络密度(对于加权情形)的方法是,将边的权值相加,除以可能的边数(x=V_x~*),其中V是边集,x表示集的基数)。如果这就是你所拥有的,我们称之为计算的网络密度Q。

我应该只保留最大重量的树枝(网络密度的前10% )。

所以,现在,你要隔离那些边,,它的重量,占Q的10%。让我们调用这个Qfrac=Q*(10/100.0)来完成这个任务,通常情况下,首先按权重按降序排序,然后开始累积它们的密度贡献,直到累积和等于(或超过) Qfrac。

在代码中,假设G是图,并且每个边都有一个weight属性:

代码语言:javascript
复制
edgesSorted =  sorted(G.edges(data = True), key=lambda x:x[2]['weight'], reverse=False)
k=0
acc=0.0
NposCons = float(G.number_of_nodes() * (G.number_of_nodes()-1))
while (acc<Qfrac):
    acc+=(edgesSorted[k][2]['weight']/NposCons
    k+=1
edgeExtract = edgesSorted[0:k]

但!

例如20根最大重量在200左右的树枝)

这个,有点不同。在这种情况下,您似乎不需要密度计算,您只需要选择10%的边缘高权重从200个边包含在整个。对此的处理略有不同:

同样,在代码中也有类似的假设,如上文所述:

代码语言:javascript
复制
edgesSorted =  sorted(G.edges(data = True), key=lambda x:x[2]['weight'], reverse=False)
edgeExtract = edgesSorted[0:int(round(G.number_of_edges() * (10/100.0)))]

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37763835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档