[英]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.