In [1]:
import networkx as nx

In [2]:
#ez small world generator
g = nx.watts_strogatz_graph(100,4,0.5)

In [5]:
nx.spring_layout(g)


Out[5]:
{0: array([ 0.42908605,  0.45017047]),
 1: array([ 0.04614613,  0.6268372 ]),
 2: array([ 0.42262637,  0.23881974]),
 3: array([ 0.06493592,  0.36278474]),
 4: array([ 0.28793691,  0.44397167]),
 5: array([ 0.02326227,  0.31924446]),
 6: array([ 0.36645219,  0.68061042]),
 7: array([ 0.28933298,  0.50516818]),
 8: array([ 0.38120494,  0.40685103]),
 9: array([ 0.93561527,  0.3891955 ]),
 10: array([ 0.72600618,  0.47259042]),
 11: array([ 0.14229396,  0.44488102]),
 12: array([ 0.        ,  0.52492712]),
 13: array([ 0.50239507,  0.5032414 ]),
 14: array([ 0.738265  ,  0.36650831]),
 15: array([ 0.44232968,  0.79895007]),
 16: array([ 0.44630215,  0.02756691]),
 17: array([ 0.43238294,  0.99019435]),
 18: array([ 0.50581622,  0.7336661 ]),
 19: array([ 0.24371893,  0.06187337]),
 20: array([ 0.41597814,  0.37730672]),
 21: array([ 0.31594584,  0.10942181]),
 22: array([ 0.27073376,  0.18962513]),
 23: array([ 0.61968051,  0.00937692]),
 24: array([ 0.48795228,  0.11351256]),
 25: array([ 0.30637317,  0.28225033]),
 26: array([ 0.32444942,  0.64833121]),
 27: array([ 0.1987147 ,  0.61864998]),
 28: array([ 0.32374068,  0.88776332]),
 29: array([ 0.45438023,  0.71046501]),
 30: array([ 0.85581943,  0.43315114]),
 31: array([ 0.84416124,  0.78258981]),
 32: array([ 0.86989824,  0.83929046]),
 33: array([ 0.73253203,  0.62201012]),
 34: array([ 0.77712034,  0.9162209 ]),
 35: array([ 0.61065722,  0.82305293]),
 36: array([ 0.43284189,  0.84565623]),
 37: array([ 0.50281412,  0.58926796]),
 38: array([ 0.60553313,  0.92102975]),
 39: array([ 0.5433742 ,  0.73438329]),
 40: array([ 0.75560279,  0.82429958]),
 41: array([ 0.80520212,  0.57275847]),
 42: array([ 0.99796726,  0.55440991]),
 43: array([ 0.96045372,  0.63744666]),
 44: array([ 0.95599176,  0.67409761]),
 45: array([ 0.76177201,  0.67384371]),
 46: array([ 0.88309281,  0.52352142]),
 47: array([ 0.89475418,  0.66307842]),
 48: array([ 0.7265949 ,  0.21669518]),
 49: array([ 0.64913789,  0.05065845]),
 50: array([ 0.58358918,  0.25265917]),
 51: array([ 0.34647573,  0.03285131]),
 52: array([ 0.48016516,  0.32734837]),
 53: array([ 0.55525281,  0.        ]),
 54: array([ 0.55265536,  0.09819476]),
 55: array([ 0.71810977,  0.1084108 ]),
 56: array([ 0.53452198,  0.32088041]),
 57: array([ 0.39193665,  0.95994405]),
 58: array([ 0.91422614,  0.74109005]),
 59: array([ 0.70903865,  0.76884587]),
 60: array([ 0.9311675 ,  0.53242799]),
 61: array([ 0.64613723,  0.47854479]),
 62: array([ 0.89945168,  0.29732286]),
 63: array([ 0.76706937,  0.08875199]),
 64: array([ 0.88636235,  0.22737585]),
 65: array([ 0.64091062,  0.09156753]),
 66: array([ 0.65385456,  0.32549371]),
 67: array([  5.23425908e-01,   4.70930024e-05]),
 68: array([ 0.63253503,  0.23482738]),
 69: array([ 0.59777654,  0.5491967 ]),
 70: array([ 0.60616538,  0.41140485]),
 71: array([ 0.75568304,  0.93533952]),
 72: array([ 0.66871134,  0.97257842]),
 73: array([ 0.82553792,  0.69634774]),
 74: array([ 0.76811352,  0.71569681]),
 75: array([ 0.79907638,  0.41775745]),
 76: array([ 0.06297959,  0.78298987]),
 77: array([ 0.19976051,  0.91375954]),
 78: array([ 0.19633286,  0.76891384]),
 79: array([ 0.21008294,  0.86159912]),
 80: array([ 0.08647713,  0.20113396]),
 81: array([ 0.16264379,  0.12336903]),
 82: array([ 0.02087583,  0.35972464]),
 83: array([ 0.06171617,  0.24713245]),
 84: array([ 0.06123753,  0.44796344]),
 85: array([ 0.25723066,  0.22947148]),
 86: array([ 0.59535086,  0.67212489]),
 87: array([ 0.76809601,  0.27008036]),
 88: array([ 0.45403199,  0.89104133]),
 89: array([ 0.30155487,  0.73593451]),
 90: array([ 0.52871981,  0.89233068]),
 91: array([ 0.69171578,  0.69183848]),
 92: array([ 0.4783717,  1.       ]),
 93: array([ 0.13667133,  0.35874199]),
 94: array([ 0.33759932,  0.75095225]),
 95: array([ 0.00404145,  0.48896042]),
 96: array([ 0.09242785,  0.68627515]),
 97: array([ 0.00802294,  0.60513684]),
 98: array([ 0.25149021,  0.45275522]),
 99: array([ 0.09977687,  0.5545573 ])}

In [7]:
#ez non-network implementation
from __future__ import division
 
import numpy        as     np
from   scipy.linalg import circulant
 
def _distance_matrix(L):
    Dmax = L//2
 
    D  = range(Dmax+1)
    D += D[-2+(L%2):0:-1]
 
    return circulant(D)/Dmax
 
def _pd(d, p0, beta):
    return beta*p0 + (d <= p0)*(1-beta)
 
def watts_strogatz(L, p0, beta, directed=False, rngseed=1):
    """
    Watts-Strogatz model of a small-world network
 
    This generates the full adjacency matrix, which is not a good way to store
    things if the network is sparse.
 
    Parameters
    ----------
    L        : int
               Number of nodes.
 
    p0       : float
               Edge density. If K is the average degree then p0 = K/(L-1).
               For directed networks "degree" means out- or in-degree.
 
    beta     : float
               "Rewiring probability."
 
    directed : bool
               Whether the network is directed or undirected.
 
    rngseed  : int
               Seed for the random number generator.
 
    Returns
    -------
    A        : (L, L) array
               Adjacency matrix of a WS (potentially) small-world network.
 
    """
    rng = np.random.RandomState(rngseed)
 
    d = _distance_matrix(L)
    p = _pd(d, p0, beta)
 
    if directed:
        A = 1*(rng.random_sample(p.shape) < p)
        np.fill_diagonal(A, 0)
    else:
        upper = np.triu_indices(L, 1)
 
        A          = np.zeros_like(p, dtype=int)
        A[upper]   = 1*(rng.rand(len(upper[0])) < p[upper])
        A.T[upper] = A[upper]
 
    return A

In [ ]: