222 x 222 노드 크기의 가중치가있는 인접성 매트릭스에서 그래프를 생성합니다. 행렬에 주어진 모든 가중치는 0.42757498546089029
과 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)
igraph 코드 :
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
)
이러한 알고리즘은 파이썬 부동 소수점 숫자를 사용하고 이러한 연산의 정밀도를 상속합니다 (부동 소수점은 https://docs.python.org/3/tutorial/floatingpoint.html에 따라 53 비트입니다) – Aric
아마도 예제를 게시 할 수 있습니다 문제가 무엇인지 알 수 있습니까? – Aric
나무가 다른가요? 나는 레이아웃 만 다르다고 믿지만 토폴로지는 적어도 언뜻보기에는 동일합니다. – DyZ