50 lines
1.0 KiB
Python
50 lines
1.0 KiB
Python
|
"""
|
||
|
==========
|
||
|
Properties
|
||
|
==========
|
||
|
|
||
|
Compute some network properties for the lollipop graph.
|
||
|
"""
|
||
|
|
||
|
import matplotlib.pyplot as plt
|
||
|
import networkx as nx
|
||
|
|
||
|
G = nx.lollipop_graph(4, 6)
|
||
|
|
||
|
pathlengths = []
|
||
|
|
||
|
print("source vertex {target:length, }")
|
||
|
for v in G.nodes():
|
||
|
spl = dict(nx.single_source_shortest_path_length(G, v))
|
||
|
print(f"{v} {spl} ")
|
||
|
for p in spl:
|
||
|
pathlengths.append(spl[p])
|
||
|
|
||
|
print()
|
||
|
print(f"average shortest path length {sum(pathlengths) / len(pathlengths)}")
|
||
|
|
||
|
# histogram of path lengths
|
||
|
dist = {}
|
||
|
for p in pathlengths:
|
||
|
if p in dist:
|
||
|
dist[p] += 1
|
||
|
else:
|
||
|
dist[p] = 1
|
||
|
|
||
|
print()
|
||
|
print("length #paths")
|
||
|
verts = dist.keys()
|
||
|
for d in sorted(verts):
|
||
|
print(f"{d} {dist[d]}")
|
||
|
|
||
|
print(f"radius: {nx.radius(G)}")
|
||
|
print(f"diameter: {nx.diameter(G)}")
|
||
|
print(f"eccentricity: {nx.eccentricity(G)}")
|
||
|
print(f"center: {nx.center(G)}")
|
||
|
print(f"periphery: {nx.periphery(G)}")
|
||
|
print(f"density: {nx.density(G)}")
|
||
|
|
||
|
pos = nx.spring_layout(G, seed=3068) # Seed layout for reproducibility
|
||
|
nx.draw(G, pos=pos, with_labels=True)
|
||
|
plt.show()
|