123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import time
- import matplotlib
- import numpy as np
- # matplotlib.use('GTK3Agg')
- from matplotlib import pyplot as plt
- def randomwalk(dims=(256, 256), n=20, sigma=5, alpha=0.95, seed=1):
- """ A simple random walk with memory """
- r, c = dims
- gen = np.random.RandomState(seed)
- pos = gen.rand(2, n) * ((r,), (c,))
- old_delta = gen.randn(2, n) * sigma
- while True:
- delta = (1. - alpha) * gen.randn(2, n) * sigma + alpha * old_delta
- pos += delta
- for ii in xrange(n):
- if not (0. <= pos[0, ii] < r):
- pos[0, ii] = abs(pos[0, ii] % r)
- if not (0. <= pos[1, ii] < c):
- pos[1, ii] = abs(pos[1, ii] % c)
- old_delta = delta
- yield pos
- def run(niter=1000, doblit=True):
- """
- Display the simulation using matplotlib, optionally using blit for speed
- """
- fig, ax = plt.subplots(1, 1)
- ax.set_aspect('equal')
- ax.set_xlim(0, 255)
- ax.set_ylim(0, 255)
- # ax.hold(True)
- rw = randomwalk()
- # x, y = rw.next()
- x, y = 0,0
- plt.show(False)
- plt.draw()
- fig.canvas.mpl_connect('draw_event', sentinel)
- # fig.canvas.draw()
- if doblit:
- # cache the background
- background = fig.canvas.copy_from_bbox(ax.bbox)
- points = ax.plot(x, y, 'o')[0]
- tic = time.time()
- for ii in range(niter):
- # update the xy data
- # x, y = rw.next()
- x,y = 0,0
- points.set_data(x, y)
- if doblit:
- # restore background
- fig.canvas.restore_region(background)
- # redraw just the points
- ax.draw_artist(points)
- # fill in the axes rectangle
- fig.canvas.blit(ax.bbox)
- else:
- # redraw everything
- fig.canvas.draw()
- plt.close(fig)
- print("Blit = %s, average FPS: %.2f" % (str(doblit), niter / (time.time() - tic)))
- def sentinel(event):
- state['draw'] = True
- if __name__ == '__main__':
- # run(doblit=False)
-
- state = {'draw': False}
- run(doblit=True)
|