In [9]:
import math, random
import scipy, pylab

In [10]:
dNetwork = {}       # dictionary of lists
iNodes = 1000       # total number of nodes
iLinks = 0

In [11]:
for i in range(iNodes):
	dNetwork[i] = []      # initialize node of key i with empty list
	for node in dNetwork.values():
		fThresh = 1.0 / (iLinks + i + 1) * (len(node) + 1)
		if(random.random() <= fThresh):
			node.append(i)
			iLinks += 1

In [13]:
# calculate the degree distribution
lDegrees = [len(node) for node in dNetwork.values()]
print (lDegrees)


[69, 8, 41, 23, 19, 0, 15, 0, 1, 0, 5, 0, 0, 2, 5, 0, 3, 5, 6, 15, 1, 1, 3, 3, 8, 4, 7, 5, 12, 10, 3, 14, 1, 28, 4, 3, 6, 1, 1, 11, 0, 4, 1, 0, 5, 4, 0, 4, 1, 1, 1, 4, 8, 0, 5, 3, 2, 3, 1, 1, 3, 2, 17, 6, 3, 0, 3, 3, 11, 4, 0, 1, 6, 6, 3, 1, 5, 0, 2, 1, 0, 6, 2, 1, 12, 3, 0, 6, 3, 2, 1, 1, 0, 1, 3, 2, 0, 5, 5, 2, 4, 3, 2, 1, 4, 3, 2, 3, 0, 2, 1, 1, 0, 0, 2, 4, 5, 1, 0, 5, 0, 0, 2, 2, 0, 0, 0, 4, 2, 0, 3, 8, 2, 1, 0, 0, 2, 2, 0, 1, 0, 0, 0, 5, 2, 3, 1, 0, 1, 0, 1, 5, 2, 5, 1, 0, 1, 3, 0, 0, 5, 1, 0, 2, 0, 1, 0, 1, 0, 3, 3, 1, 0, 2, 0, 0, 0, 2, 1, 5, 3, 3, 0, 0, 1, 1, 2, 4, 1, 4, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 4, 0, 1, 3, 4, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 2, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 2, 2, 0, 3, 0, 2, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 1, 0, 5, 1, 1, 3, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 3, 1, 2, 0, 0, 0, 0, 2, 0, 2, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 2, 0, 3, 0, 0, 4, 0, 1, 2, 0, 0, 1, 5, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 3, 0, 1, 1, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 2, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 2, 0, 0, 2, 3, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 1, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

In [14]:
# and draw a histogram
pylab.hist(lDegrees,50)
pylab.xlabel("Node Degree")
pylab.ylabel("Number of Nodes")
pylab.title("Preferential Attachment")
pylab.show()



In [19]:
import networkx as nx
G = nx.complete_graph(5)
preds = nx.preferential_attachment(G, [(0, 1), (2, 3)])
for u, v, p in preds:
     #'(%d, %d) -> %d' % (u, v, p)
     print (u,v,p)


0 1 16
2 3 16

In [18]:
print (preds)


<generator object preferential_attachment.<locals>.<genexpr> at 0x11b59b468>