|
1 | 1 | #!/usr/bin/env python |
2 | 2 |
|
| 3 | +import argparse |
3 | 4 | import numpy as np |
4 | | -from stats import Statistics, compute_stats |
5 | | - |
6 | | -n = 10 |
7 | | -data = np.empty(n) |
8 | | -my_stats = Statistics() |
9 | | -for i in range(n): |
10 | | - value = 0.3*i |
11 | | - my_stats.add(value) |
12 | | - data[i] = value |
13 | | -print(my_stats.mean()) |
14 | | -my_stats = compute_stats(data) |
15 | | -print(my_stats.mean()) |
| 5 | +import stats |
| 6 | +import timeit |
| 7 | + |
| 8 | + |
| 9 | +def compute_stats(data): |
| 10 | + my_stats = stats.Statistics() |
| 11 | + for value in data: |
| 12 | + my_stats.add(value) |
| 13 | + return my_stats |
| 14 | + |
| 15 | +def main(): |
| 16 | + parser = argparse.ArgumentParser(description='Compute statistics for a given number of random numbers') |
| 17 | + parser.add_argument('--n', type=int, default=10, |
| 18 | + help='number of data values') |
| 19 | + parser.add_argument('--repetitions', type=int, default=1, |
| 20 | + help='number of repetitions') |
| 21 | + parser.add_argument('--check', action='store_true', |
| 22 | + help='check the results') |
| 23 | + args = parser.parse_args() |
| 24 | + data = np.random.uniform(size=args.n) |
| 25 | + time = timeit.timeit(lambda: compute_stats(data), number=args.repetitions) |
| 26 | + print(f'{time/args.repetitions:.6f} s (Statistics iterative mean)') |
| 27 | + time = timeit.timeit(lambda: stats.compute_stats(data), number=args.repetitions) |
| 28 | + print(f'{time/args.repetitions:.6f} s (Statistics numpy access mean)') |
| 29 | + time = timeit.timeit(lambda: data.mean(), number=args.repetitions) |
| 30 | + print(f'{time/args.repetitions:.6f} s (numpy mean)') |
| 31 | + if args.check: |
| 32 | + print() |
| 33 | + my_stats = compute_stats(data) |
| 34 | + print(f'{my_stats.mean()} (Statistics iterative mean)') |
| 35 | + my_stats = stats.compute_stats(data) |
| 36 | + print(f'{my_stats.mean()} (Statistics numpy access mean)') |
| 37 | + print(f'{data.mean()} (numpy mean)') |
| 38 | + |
| 39 | +if __name__ == '__main__': |
| 40 | + main() |
0 commit comments