重み付けされたネットワーク x を描画すると、距離に関して実際の重みが実際には表されません。不足しているパラメーターやその他の問題があるかどうかに興味がありました。
そのため、次のようにシミュレートされたデータセットを作成することから始めました
from pylab import plot,show
from numpy import vstack,array
from numpy.random import rand
from scipy.cluster.vq import kmeans,vq
from scipy.spatial.distance import euclidean
import networkx as nx
from scipy.spatial.distance import pdist, squareform, cdist
# data generation
data = vstack((rand(5,2) + array([12,12]),rand(5,2)))
a = pdist(data, 'euclidean')
def givexy(index1D, VectorLength):
return [index1D%VectorLength, index1D/VectorLength]
import matplotlib.pyplot as plt
plt.plot(data[:,0], data[:,1], 'o')
plt.show()
次に、すべてのペア間のユークリッド距離を計算し、その距離を重みとして使用します
G = nx.empty_graph(1)
for cnt, item in enumerate(a):
print cnt
G.add_edge(givexy(cnt, 10)[0], givexy(cnt, 10)[1], weight=item, length=0)
pos = nx.spring_layout(G)
nx.draw_networkx(G, pos)
edge_labels=dict([((u,v,),"%.2f" % d['weight'])
for u,v,d in G.edges(data=True)])
nx.draw_networkx_edge_labels(G,pos,edge_labels=edge_labels)
#~ nx.draw(G,pos,edge_labels=edge_labels)
plt.show()
exit()
別のプロットが得られる可能性があります-理由は不明ですが、ランダムです。私の主な問題は、ノードの距離です。たとえば、ノード 4 と 8 の間の距離は 0.82 ですが、ノード 7 と 0 の距離よりも長く見えます。
ヒントはありますか?ありがとうございました、