I ran the following script:
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_edge(1, 1, weight=2)
G.add_edge(1, 3, weight=2)
G.add_edge(1, 4, weight=1)
G.add_edge(1, 5, weight=5)
G.add_edge(2, 3, weight=3)
G.add_edge(2, 4, weight=2)
G.add_edge(3, 5, weight=4)
d = G.degree(1)
print G.edge[1]
print "Degree of node 1:", \
G.degree(1)
print "Weighted degree of node 1:", \
G.degree(1, weight='weight')
nx.draw(G)
plt.show()
The output is:
{1: {'weight': 2}, 3: {'weight': 2}, 4: {'weight': 1}, 5: {'weight': 5}}
Weighted degree: 5
Weighted degree: 12
And the drawing is like this:
What confused me is:
Since there are 4 nodes adjacent to the node 1 (including itself), why the degree is 5?
Since the total weight of the adjacent edges of node 1 is 10 (2+2+1+5), why the degree method produced 12?
Thanks
For an undirected graph, the degree of a vertex is equal to the number of adjacent vertices.
A special case is a loop, which adds two to the degree. This can be understood by letting each connection of the loop edge count as its own adjacent vertex. In other words, a vertex with a loop "sees" itself as an adjacent vertex from both ends of the edge thus adding two, not one, to the degree.
According to the definition of degree,
In graph theory, the degree (or valency) of a vertex of a graph is the number of edges incident to the vertex, with loops counted twice. (my emphasis)
So G.degree(1)
is 5 since the loop from 1 to 1 is counted twice. The weighted degree also counts the loop twice, hence the total is 12 not 10, since the 1 node has weight 2.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With