Sub-random numbers sort of look random, but they aren’t and they usually provide better coverage over an interval which is sometimes more important than having truly random data. For example, you wouldn’t use sub-random numbers for encryption, but they’d be great for performing Monte Carlo calculations. You can read more about them on the Wikipedia page for low discrepancy sequences.
One simple technique is that of additive recurrence. You start with a seed , and a constant . You then use the following recurrence relation:
Below is the code, with some imports.
import scipy.stats import scipy import random from pylab import * def additive_recurrence( n ): s0, a = scipy.stats.uniform().rvs((2,)) s = [ s0 ] for i in xrange(n): s.append( ( s[-1] + a ) % 1 ) return s n = 250 x, y = additive_recurrence(n), additive_recurrence(n) scatter( x, y, facecolor='none', edgecolor='blue', alpha=0.5 ) axes().set_aspect('equal') savefig( 'additive_recurrence.png', dpi=200 )
Different values for and produce different irregular meshes over the unit square.