我有图和计数的网络密度,现在我应该只保留具有最大重量的分支(网络密度的前10%,例如从200到20个最大权重的20个分支)。我找不到该怎么做吗?
发布于 2016-06-11 16:23:57
这个问题有点混乱,所以如果稍后有更多资料出现,我很乐意修改答覆。
我有图表和网络密度,
其中我假设你有一个没有方向的(?)加权网络因此,计算网络密度(对于加权情形)的方法是,将边的权值相加,除以可能的边数(x=V_x~*),其中V是边集,x表示集的基数)。如果这就是你所拥有的,我们称之为计算的网络密度Q。
我应该只保留最大重量的树枝(网络密度的前10% )。
所以,现在,你要隔离那些边,,它的重量,占Q的10%。让我们调用这个Qfrac=Q*(10/100.0)来完成这个任务,通常情况下,首先按权重按降序排序,然后开始累积它们的密度贡献,直到累积和等于(或超过) Qfrac。
在代码中,假设G是图,并且每个边都有一个weight属性:
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个边包含在整个。对此的处理略有不同:
同样,在代码中也有类似的假设,如上文所述:
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)))]希望这能有所帮助。
https://stackoverflow.com/questions/37763835
复制相似问题