In [57]:
# 3.10
s="""1: 2000000 loops, best of 5: 0.156 usec per loop
101: 200000 loops, best of 5: 1.95 usec per loop
201: 100000 loops, best of 5: 3.73 usec per loop
301: 50000 loops, best of 5: 5.1 usec per loop
401: 50000 loops, best of 5: 6.62 usec per loop
501: 50000 loops, best of 5: 8.07 usec per loop
601: 50000 loops, best of 5: 9.32 usec per loop
701: 20000 loops, best of 5: 11.3 usec per loop
801: 20000 loops, best of 5: 12.5 usec per loop
901: 20000 loops, best of 5: 14.4 usec per loop
1001: 20000 loops, best of 5: 16 usec per loop
1101: 20000 loops, best of 5: 17.3 usec per loop
1201: 10000 loops, best of 5: 17.8 usec per loop
1301: 20000 loops, best of 5: 19.3 usec per loop
1401: 10000 loops, best of 5: 20.1 usec per loop
1501: 10000 loops, best of 5: 21.9 usec per loop
1601: 10000 loops, best of 5: 23.2 usec per loop
1701: 10000 loops, best of 5: 24.9 usec per loop
1801: 10000 loops, best of 5: 26 usec per loop
1901: 10000 loops, best of 5: 28.7 usec per loop
2001: 10000 loops, best of 5: 28.6 usec per loop
2101: 10000 loops, best of 5: 31.2 usec per loop
2201: 10000 loops, best of 5: 32.2 usec per loop
2301: 10000 loops, best of 5: 32.9 usec per loop
2401: 5000 loops, best of 5: 35.7 usec per loop
2501: 10000 loops, best of 5: 36.7 usec per loop
2601: 10000 loops, best of 5: 40 usec per loop
2701: 5000 loops, best of 5: 39.3 usec per loop
2801: 5000 loops, best of 5: 40.1 usec per loop
2901: 5000 loops, best of 5: 41.9 usec per loop
"""
# 3.12
s2 = """1: 5000000 loops, best of 5: 0.0792 usec per loop
101: 200000 loops, best of 5: 1.41 usec per loop
201: 100000 loops, best of 5: 2.81 usec per loop
301: 100000 loops, best of 5: 3.7 usec per loop
401: 50000 loops, best of 5: 4.91 usec per loop
501: 50000 loops, best of 5: 5.89 usec per loop
601: 50000 loops, best of 5: 6.99 usec per loop
701: 50000 loops, best of 5: 7.7 usec per loop
801: 50000 loops, best of 5: 8.36 usec per loop
901: 50000 loops, best of 5: 10.1 usec per loop
1001: 20000 loops, best of 5: 10.4 usec per loop
1101: 20000 loops, best of 5: 11.5 usec per loop
1201: 20000 loops, best of 5: 12.4 usec per loop
1301: 20000 loops, best of 5: 12.8 usec per loop
1401: 20000 loops, best of 5: 14.2 usec per loop
1501: 20000 loops, best of 5: 15.7 usec per loop
1601: 20000 loops, best of 5: 17 usec per loop
1701: 20000 loops, best of 5: 17.5 usec per loop
1801: 20000 loops, best of 5: 17.6 usec per loop
1901: 10000 loops, best of 5: 19.5 usec per loop
2001: 10000 loops, best of 5: 19.4 usec per loop
2101: 10000 loops, best of 5: 19.9 usec per loop
2201: 10000 loops, best of 5: 22.4 usec per loop
2301: 10000 loops, best of 5: 23 usec per loop
2401: 10000 loops, best of 5: 23.2 usec per loop
2501: 10000 loops, best of 5: 25.3 usec per loop
2601: 10000 loops, best of 5: 25.4 usec per loop
2701: 10000 loops, best of 5: 26 usec per loop
2801: 10000 loops, best of 5: 26.7 usec per loop
2901: 10000 loops, best of 5: 26.7 usec per loop
"""
# 3.11
s3 = """1: 2000000 loops, best of 5: 0.153 usec per loop
101: 200000 loops, best of 5: 1.71 usec per loop
201: 100000 loops, best of 5: 3.38 usec per loop
301: 50000 loops, best of 5: 4.6 usec per loop
401: 50000 loops, best of 5: 5.86 usec per loop
501: 50000 loops, best of 5: 7.12 usec per loop
601: 50000 loops, best of 5: 8.27 usec per loop
701: 20000 loops, best of 5: 9.76 usec per loop
801: 20000 loops, best of 5: 11 usec per loop
901: 20000 loops, best of 5: 11.9 usec per loop
1001: 20000 loops, best of 5: 13.3 usec per loop
1101: 20000 loops, best of 5: 14.6 usec per loop
1201: 20000 loops, best of 5: 15.3 usec per loop
1301: 20000 loops, best of 5: 16.6 usec per loop
1401: 20000 loops, best of 5: 17.8 usec per loop
1501: 20000 loops, best of 5: 18.9 usec per loop
1601: 10000 loops, best of 5: 20.1 usec per loop
1701: 10000 loops, best of 5: 22 usec per loop
1801: 10000 loops, best of 5: 22.9 usec per loop
1901: 10000 loops, best of 5: 23.6 usec per loop
2001: 10000 loops, best of 5: 24.5 usec per loop
2101: 10000 loops, best of 5: 25.7 usec per loop
2201: 10000 loops, best of 5: 26.9 usec per loop
2301: 10000 loops, best of 5: 28.1 usec per loop
2401: 10000 loops, best of 5: 29.4 usec per loop
2501: 10000 loops, best of 5: 30.9 usec per loop
2601: 10000 loops, best of 5: 32 usec per loop
2701: 10000 loops, best of 5: 32.7 usec per loop
2801: 10000 loops, best of 5: 33.8 usec per loop
2901: 10000 loops, best of 5: 35.3 usec per loop
"""
In [13]:
def split(s):
ret = []
lines = s.strip().split("\n")
for line in lines:
words = line.split()
n = int(words[0][:-1])
t = float(words[6])
ret.append((n, t))
return ret
In [58]:
r1 = dict(split(s))
r2 = dict(split(s2))
r3 = dict(split(s3))
In [78]:
x = list(r1.keys())
y1 = r1.values()
y2 = r2.values()
y3 = r3.values()
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots()
color = 'tab:blue'
ax1.plot(x, y1, label="3.10")
ax1.plot(x, y3, label="3.11")
ax1.plot(x, y2, label="3.12")
ax1.set_xlabel('Length of ListComp')
ax1.set_ylabel('Time(usec)')
ax2 = ax1.twinx()
ratio = [a/b for a, b in zip(y1, y2)]
ratio = [(a-b)/b*100 for a, b in zip(y1, y2)]
ax2.plot(x, ratio, label="3.10 v.s. 3.12", color="purple")
ax2.set_ylabel('% faster than 3.10')
lines, labels = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
fig.subplots_adjust(right=0.85)
#plt.legend(lines + lines2, labels + labels2, loc='upper left', bbox_to_anchor=(1, 1))
plt.legend(lines + lines2, labels + labels2, loc='upper left', bbox_to_anchor=(1.1, 1))
Out[78]: