Commit 6afd28c
committed
Don't call np.identity() in transforms.
Speeds up setting up of subplots by ~3% and their drawing by ~2% at a
reasonably limited cost in legibility.
The difference is actually not easy to observe because variation in
timings are much greater than 3% from run to run.
In a call like `subplots(10, 10)`, just setting up the figure calls
`np.identity(3)` 1801 times and actually drawing the figure another 1705
times (measured by manually instrumenting the calls to identity() in the
old version. At the same time,
```
%timeit np.identity(3)
```
and
```
%%timeit t = np.identity(3)
t.copy()
```
show that on my machine, a call to np.identity(3) is approximately 16us
slower than copying a preexisting matrix; multiplying this by 1801 shows
that the calls to identity correspond to an excess time of ~27ms.
Finally, setting up the axes and drawing it can be timed using
```
from time import perf_counter
import matplotlib; matplotlib.use("agg")
from matplotlib import pyplot as plt
N = 10
# First draw always seems slower, so skip it.
figure = plt.figure()
figure.subplots(N, N)
figure.canvas.draw()
plt.close("all")
for _ in range(5):
figure = plt.figure()
start = perf_counter()
figure.subplots(N, N)
print("{: 4}".format(int(1000 * (perf_counter() - start))), end=" ")
start = perf_counter()
figure.canvas.draw()
print("{: 4}".format(int(1000 * (perf_counter() - start))))
plt.close("all")
```
which shows that (on my machine) setting up the subplots takes ~850ms
and drawing them ~1300ms (but again, with a lot of jitter).
Hence, the gain from the patch should be ~3% for the setup and ~2% for
the draw.1 parent fde699c commit 6afd28c
1 file changed
Lines changed: 5 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1928 | 1928 | | |
1929 | 1929 | | |
1930 | 1930 | | |
1931 | | - | |
| 1931 | + | |
| 1932 | + | |
1932 | 1933 | | |
1933 | 1934 | | |
1934 | 1935 | | |
| |||
1999 | 2000 | | |
2000 | 2001 | | |
2001 | 2002 | | |
2002 | | - | |
| 2003 | + | |
2003 | 2004 | | |
2004 | 2005 | | |
2005 | 2006 | | |
2006 | 2007 | | |
2007 | 2008 | | |
2008 | | - | |
| 2009 | + | |
| 2010 | + | |
2009 | 2011 | | |
2010 | 2012 | | |
2011 | 2013 | | |
| |||
0 commit comments