MSAC
[imago.git] / src / lhs.py
1 """Latin hypercube sampling."""
2
3 import random
4
5 def test():
6     bound = 10.
7     m = 25
8     l = latin_hypercube(2, bound, m)
9     import matplotlib.pyplot as pyplot
10     fig = pyplot.figure()
11     fig.add_subplot(121)
12     pyplot.plot([v[0] for v in l], [v[1] for v in l], 'o')
13     fig.add_subplot(122)
14     pyplot.plot([random.random() * 2 * bound - bound for _  in xrange(m)], 
15                 [random.random() * 2 * bound - bound for _  in xrange(m)], 'o')
16     pyplot.show()
17     import sys
18     sys.exit()
19
20 def latin_hypercube(dim, bound, m):
21     """Get a sample of *dim* dimentions, each in range (-*bound*, +*bound*)."""
22     dv = (2 * bound) / float(m)
23     dim_p = [range(m) for _ in xrange(dim)] 
24     for p in dim_p:
25         random.shuffle(p)
26     points = [list(l) for l in zip(*dim_p)]
27     points = [[(float(l) + random.random()) * dv - bound  for l in p] for p in points]
28     return points