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
|
import numpy as np
from matplotlib import ticker
def hw(i):
res = 0
while i:
res += 1
i &= i - 1
return res
def moving_average(a, n) :
ret = np.cumsum(a, dtype=float)
ret[n:] = ret[n:] - ret[:-n]
return ret[n - 1:] / n
def plot_hist(axes, data, xlabel=None, log=False, avg=True, median=True, bins=None, **kwargs):
time_max = max(data)
time_min = min(data)
time_avg = np.average(data)
time_median = np.median(data)
if bins is None:
bins = time_max - time_min + 1
hist = axes.hist(data, bins=bins, log=log, **kwargs)
if avg:
axes.axvline(x=time_avg, alpha=0.7, linestyle="dotted", color="blue", label="avg = {}".format(time_avg))
if median:
axes.axvline(x=time_median, alpha=0.7, linestyle="dotted", color="green", label="median = {}".format(time_median))
axes.set_ylabel("count" + ("\n(log)" if log else ""))
axes.set_xlabel("time" if xlabel is None else xlabel)
axes.xaxis.set_major_locator(ticker.MaxNLocator())
if avg or median:
axes.legend(loc="best")
return hist
def miller_correction(entropy, samples, bins):
return entropy + (bins - 1)/(2*samples)
|