簡體   English   中英

Networkx最小生成樹-精度問題?

[英]Networkx Minimum Spanning Tree - precision issues?

我正在從一個222 x 222節點大小的加權鄰接矩陣創建圖。 矩陣中給出的所有權重都是介於0.427574985460890291.6671726002927263之間的1.6671726002927263 nx.minimum_spanning_tree(G, weight = "weight")方法給我下面的第一張圖片,同時,如果我將所有矩陣值乘以100.0則相同的方法給我第二張圖片。 使用igraph繪制相同內容時不會發生這種情況。 Networkx文檔Networkx提及精度問題。 你知道為什么會發生嗎? 具有潛在精度問題的圖的最小生成樹 圖的最小生成樹

networkx代碼:

G=nx.from_numpy_matrix(M)
G1=nx.minimum_spanning_tree(G, weight = "weight")

labels = {i : node_names[i][1] for i in G1.nodes()}
colors = {i : node_attributes[labels[i]] for i in G1.nodes()}
for i in G1.nodes():
    G1.node[i]["color"] = 'white'
    G1.node[i]["style"] = "filled"    
    G1.node[i]["fillcolor"] = colors[i]
color=nx.get_node_attributes(G1,'color')
fillcolor=nx.get_node_attributes(G1,'fillcolor')
H=nx.relabel_nodes(G1,labels)
nx.draw(H, scale=30, nodelist=H.nodes(), linewidths=0, with_labels = True, node_size=500,font_size=8)

文字代碼:

    g = igraph.Graph.Weighted_Adjacency(M.tolist())
    for i, v in enumerate(g.vs):
        v["color"] = colors[i]
        v["label"] = labels[i]
        v["frame_color"] = colors[i]
        v["label_size"] = 10
        v["size"] = 26
    G = g.spanning_tree(weights='weight', return_tree=True)
    G.to_undirected()
    igraph.plot(G, labels=False, bbox = (900, 900), margin=40, loops=False

)

您所看到的是預期的行為,而不是完全的精度問題。 顧名思義,彈簧布局將節點之間的彈簧動作“模擬”到其位置上。 節點位置在一個圓上初始化,然后將彈簧力施加到您的節點一定的迭代次數(默認為50)。 如果連接權重較弱,則節點將或多或少保留在圓上(第一種情況),如果權重較大,則節點將偏向中心(第二種情況)。

在igraph中,默認情況下,未加權圖用於計算布局,您需要顯式賦予繪圖例程權重。 我懷疑您可能未指定“ weights”參數就繪制了圖形。

暫無
暫無

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

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