|
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