00001
00002
00003
00004
00005 from __future__ import division
00006
00007 from random_distributions import *
00008 from enhanced_grid import Grid2D
00009 from random import random
00010 from random_image import samples_to_image
00011
00012
00013 def demo_distribution_1d():
00014 seed(0)
00015
00016
00017 inputSamples = [-20, -10, 0, 10, 20, 30, 40, 50, 60]
00018 outputSamples = [2, 10, 80, 75, 60, 30, 10, 5, 1]
00019
00020 newInputMin = outputSamples[0]
00021 newInputMax = sum(outputSamples)
00022
00023 newOutputMax = inputSamples[-1]
00024 newOutputMin = inputSamples[0]
00025
00026 curve = make_distribution_curve(inputSamples, outputSamples)
00027
00028 for i in range(newSampleCount):
00029 input = (i / (newSampleCount - 1)) * (newInputMax - newInputMin) + newInputMin
00030 output = curve(input)
00031
00032
00033 testSampleCount = 100;
00034 count = [0] * testSampleCount
00035
00036
00037 for i in range(10000):
00038 uniformRandVal = random()
00039
00040
00041 curvedRandVal = curve(uniformRandVal)
00042
00043
00044 countIndex = int((curvedRandVal - newOutputMin) / (newOutputMax - newOutputMin) * testSampleCount)
00045
00046
00047
00048
00049 if (countIndex < testSampleCount):
00050 count[countIndex] += 1
00051 else:
00052 count[testSampleCount - 1] += 1
00053
00054
00055 for i in range(testSampleCount):
00056 print '%d\t%d' % (i, count[i])
00057
00058
00059
00060
00061 def demo_distribution_2d():
00062
00063
00064
00065
00066
00067
00068 grid = Grid2D((4, 4))
00069 grid[..., ...] = [[1, 2, 4, 8],
00070 [2, 3, 5, 11],
00071 [4, 5, 7, 11],
00072 [8, 11, 11, 11]]
00073
00074 print grid
00075
00076 probs = distribution_from_grid(grid, 4, 4)
00077
00078 print probs
00079
00080 d = Distribution2D(probs, (0, 0), (500, 500))
00081
00082 samples = []
00083
00084 for k in range(10000):
00085 samples.append(d(random(), random()))
00086
00087 samples_to_image(samples, (200, 200), 'rand_dist.png')
00088
00089
00090
00091 demo_distribution_2d()