Matplotlib animation zu langsam ( ~3 fps )
Muss ich animieren, um die Daten so wie Sie kommen mit einem 2D-histogram2d ( vielleicht später 3D-aber als ich höre, mayavi ist besser für die ).
Hier der code:
import numpy as np
import numpy.random
import matplotlib.pyplot as plt
import time, matplotlib
plt.ion()
# Generate some test data
x = np.random.randn(50)
y = np.random.randn(50)
heatmap, xedges, yedges = np.histogram2d(x, y, bins=5)
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]
# start counting for FPS
tstart = time.time()
for i in range(10):
x = np.random.randn(50)
y = np.random.randn(50)
heatmap, xedges, yedges = np.histogram2d(x, y, bins=5)
plt.clf()
plt.imshow(heatmap, extent=extent)
plt.draw()
# calculate and print FPS
print 'FPS:' , 20/(time.time()-tstart)
Gibt es 3 fps, zu langsam offenbar. Ist es die Verwendung von numpy.random in jeder iteration? Sollte ich blit? Wenn ja, wie?
Haben die docs einige schöne Beispiele, aber für mich, die ich brauche, um zu verstehen, was alles funktioniert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dank @Chris, ich warf einen Blick auf die Beispiele wieder auf und fand auch diese unglaublich hilfreiche post hier.
Als @bmu Staaten, die er zu beantworten (siehe post) mit einer animation.FuncAnimation Weg für mich war.
Ich vermute, es ist die Verwendung von
np.histogram2d
in jeder loop-iteration. oder, dass in jeder loop-iteration derfor
Schleife Sie sind clearing und zeichnen ein neues Bild. Um die Dinge zu beschleunigen, sollten Sie erstellen eine Figur einmal und aktualisieren Sie einfach die Eigenschaften und Daten, die der Abbildung in einer Schleife. Werfen Sie einen Blick durch die matplotlib animation Beispiele für einige Hinweise auf wie dies zu tun. Typischerweise umfasst das aufrufenmatplotlib.pyploy.plot
dann in einer Schleife aufrufenaxes.set_xdata
undaxes.set_ydata
.In Ihrem Fall jedoch, werfen Sie einen Blick auf die matplotlib animation Beispiel dynamisches Bild 2. In diesem Beispiel ist die Generierung von Daten ist getrennt von der animation der Daten (möglicherweise nicht eine gute Herangehensweise, wenn man viele Daten). Durch die Spaltung dieser beiden Teile bis Sie sehen können, die einen Engpass verursachen,
numpy.histrogram2d
oderimshow
(verwenden Sietime.time()
um jedes Teil).P. s.
np.random.randn
ist ein Pseudo-random number generator. Diese neigen dazu, einfache lineare Generatoren generieren kann viele Millionen von (Pseudo-)Zufallszahlen pro Sekunde, so ist dies fast sicher nicht dein Flaschenhals - Zeichnung auf dem Bildschirm ist fast immer ein langsamer Prozess als eine beliebige Anzahl Knirschen.