2016-06-11 34 views

回答

2

这个问题有点令人困惑,所以,如果稍后会提供更多信息,我很乐意修改响应。

我有图表和计数网络密度,

通过其中我假设你有一个无向(?)加权网络。因此,网络密度(对于加权情况)将通过对边的权重求和并将其除以可能边的数量(| V | *(| V | -1)来计算,其中V是边集和| 。|表示集合的基数)。如果这是你所拥有的,让我们把计算的网络密度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] 

BUT!

FO实施例20个分支与最大为200)

此,稍有不同。在这种情况下,您似乎不需要进行密度计算,只需要选择图中包含的200个边的高权重边的10%,总数为。这是处理略有不同:

同样,在代码与类似的假设如上:

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)))] 

希望这有助于。