簡體   English   中英

Python留出10%的分支以最大權重NetworkX圖

[英]Python leave 10% branches with max weight NetworkX graph

我有圖並計算了網絡密度,現在我應該只保留權重最大的分支(網絡密度的前10%,例如20個權重最大的分支從200開始)。 我找不到該怎么做?

這個問題有些令人困惑,因此,如果以后有更多信息出現,我很樂意修改答復。

我有圖表並計算了網絡密度,

我假設您使用的是無向(?)加權網絡。 因此,將通過對邊緣的權重求和並除以可能的邊緣數(| V | *(| V | -1)來計算網絡密度(對於加權情況),其中V是邊緣集,| V 。|表示集合的基數)。 如果這是您所擁有的,我們稱為計算的網絡密度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開始)

這有點不同。 在這種情況下,您似乎不需要密度計算,只需要從圖中總共包含的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)))]

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM