Generating Symmetric Matrices in Numpy
You could just do something like:
import numpy as np
N = 100
b = np.random.random_integers(-2000,2000,size=(N,N))
b_symm = (b + b.T)/2
Where you can choose from whatever distribution you want in the np.random
or equivalent scipy module.
Update: If you are trying to build graph-like structures, definitely check out the networkx package:
http://networkx.lanl.gov
which has a number of built-in routines to build graphs:
http://networkx.lanl.gov/reference/generators.html
Also if you want to add some number of randomly placed zeros, you can always generate a random set of indices and replace the values with zero.
I'd better do:
a = np.random.rand(N, N)
m = np.tril(a) + np.tril(a, -1).T
because in this case all elements of a matrix are from same distribution (uniform in this case).
There is a mathematical property in matrices that allows such structure to be created easily: A.T * A where A is a row vector and A.t is the transpose (a column vector). This always returns a square positive definite symmetric matrix which is always invertible, so you have no worries with null pivots ;)
# any matrix algebra will do it, numpy is simpler
import numpy.matlib as mt
# create a row vector of given size
size = 3
A = mt.rand(1,size)
# create a symmetric matrix size * size
symmA = A.T * A