Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import matplotlib.pyplot as plt
import csv, sys, numpy as np
from math import sqrt
filename = sys.argv[1]
with open(filename, 'r') as file:
reader = csv.reader (file, strict = True)
fieldnames = None
#fieldnames = reader.fieldnames
for row in reader:
if fieldnames is None:
fieldnames = [ n.strip() for n in row]
values = [ [] for _ in fieldnames ]
continue
values[0].append (int(row[0]))
for i, v in enumerate(row[1:]):
values[i+1].append (float(v))
# Compute mean and variance for each values, for each separating axis
means = [ [ 0., ] * 12 for _ in fieldnames[4:] ]
stddevs = [ [ 0., ] * 12 for _ in fieldnames[4:] ]
nb_occurence = [ 0, ] * 12
for i, id in enumerate(values[0]):
nb_occurence[id] += 1
for i, id in enumerate(values[0]):
for k, n in enumerate(fieldnames[4:]):
v = values[k+4][i]
means [k][id] += v / nb_occurence[id]
stddevs[k][id] += v * v / nb_occurence[id]
for k, n in enumerate(fieldnames[4:]):
for id in range(12):
#means [k][id] /= nb_occurence[id]
#stddevs[k][id] = sqrt (stddevs[k][id]) / nb_occurence[id] - means[k][id])
stddevs[k][id] = sqrt (stddevs[k][id] - means[k][id]*means[k][id])
subplots = False
Nrows = 1
Ncols = 3
iplot = 1
time_vs_sep_axis = True
nb_occ_sep_axis = False
avg_time_vs_impl = True
if time_vs_sep_axis:
if subplots: plt.subplot (Nrows, Ncols, iplot)
else: plt.figure (iplot)
plt.title ("Time, with std dev, versus separating axis")
for k, n in enumerate(fieldnames[4:]):
#plt.errorbar ([ np.linspace(0, 11, 12) + shift for shift in np.linspace (-0.2, 0.2, ) ], means[k], stddevs[k], label=n)
plt.errorbar (np.linspace(0, 11, 12), means[k], stddevs[k], label=n)
# plt.errorbar (np.linspace(0, 11, 12), means[k], [ [ 0 ] * len(stddevs[k]), stddevs[k] ], label=n)
plt.xlim([-0.5,11.5])
plt.ylabel('Time (ns)')
plt.xlabel('Separating axis')
plt.legend(loc='upper left')
axx = plt.gca().twinx()
axx.hist (values[0], bins=[ i-0.5 for i in range(13) ], bottom=-0.5, cumulative=True,
rwidth=0.5, fill=False, label='Cumulative occurence')
axx.set_ylabel('Nb occurence of a separating axis.')
plt.legend(loc='lower right')
iplot += 1
if nb_occ_sep_axis:
if subplots: plt.subplot (Nrows, Ncols, iplot)
else: plt.figure (iplot)
plt.title ("Nb of occurence per separating axis")
plt.hist (values[0], bins=[ i-0.5 for i in range(13) ])
plt.ylabel('Nb occurence')
plt.xlabel('Separating axis')
dlb_id = 1
d_id = 2
#plt.title ("Time, with std dev, versus distance")
#for k, n in enumerate(fieldnames[4:]):
#plt.plot (values[dlb_id], values[k+4], '.', label=n)
iplot += 1
if avg_time_vs_impl:
if subplots: plt.subplot (Nrows, Ncols, iplot)
else: plt.figure (iplot)
plt.title ("Average time versus the implementation")
#plt.boxplot(values[4:], labels=fieldnames[4:], showmeans=True)
_mins = np.min (values[4:], axis=1)
_maxs = np.max (values[4:], axis=1)
_means = np.mean (values[4:], axis=1)
_stddev = np.std (values[4:], axis=1)
_sorted = sorted ( zip(fieldnames[4:], _means, _stddev, _mins, _maxs), key=lambda x: x[1])
plt.errorbar(
[ f for f,m,s,l,u in _sorted],
[ m for f,m,s,l,u in _sorted],
[ s for f,m,s,l,u in _sorted],
fmt='go', linestyle='', label='mean and std deviation')
plt.plot (
[ f for f,m,s,l,u in _sorted],
[ l for f,m,s,l,u in _sorted],
'b+', ls='', label='min')
plt.plot (
[ f for f,m,s,l,u in _sorted],
[ u for f,m,s,l,u in _sorted],
'r+', ls='', label='max')
plt.ylabel('Time (ns)')
plt.xticks(rotation=20)
plt.legend()
plt.show()