Add clt.py
This commit is contained in:
61
python/clt.py
Normal file
61
python/clt.py
Normal file
@@ -0,0 +1,61 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
from numpy.random import random
|
||||
|
||||
|
||||
def get_group_averages(num_groups, group_size):
|
||||
averages = []
|
||||
|
||||
rand_values = random(num_groups * group_size)
|
||||
curr_num = 0
|
||||
for i, num in enumerate(rand_values):
|
||||
curr_num += num
|
||||
|
||||
if i % group_size == 0:
|
||||
averages.append(curr_num / group_size)
|
||||
curr_num = 0
|
||||
|
||||
return averages
|
||||
|
||||
|
||||
def get_bins(values, num_bins, min_val = 0, max_val = 1):
|
||||
bins = [0 for _ in range(num_bins)]
|
||||
|
||||
value_range = abs(min_val - max_val)
|
||||
bin_size = value_range / num_bins
|
||||
|
||||
for value in values:
|
||||
for curr_bin in range(num_bins):
|
||||
bin_start = curr_bin * bin_size
|
||||
bin_end = bin_start + bin_size
|
||||
|
||||
if value > bin_start and value < bin_end:
|
||||
bins[curr_bin] += 1
|
||||
break
|
||||
|
||||
return bins
|
||||
|
||||
|
||||
def main(argv):
|
||||
from argparse import ArgumentParser
|
||||
parser = ArgumentParser()
|
||||
parser.add_argument('num_values')
|
||||
parser.add_argument('group_size')
|
||||
parser.add_argument('num_bins')
|
||||
args = parser.parse_args(argv[1:])
|
||||
|
||||
num_values = int(args.num_values)
|
||||
group_size = int(args.group_size)
|
||||
num_bins = int(args.num_bins)
|
||||
|
||||
values = get_group_averages(num_values, group_size)
|
||||
bins = get_bins(values, num_bins)
|
||||
|
||||
plt.plot(bins)
|
||||
plt.savefig('out.png')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from sys import argv
|
||||
main(argv)
|
||||
Reference in New Issue
Block a user