Ich möchte ein 2D-Array (ungefähr 1000x1000) mit den Werten einer Farbskala darstellen. Also habe ich matplotlib.pcolor verwendet, was genau das getan hat, aber aus irgendeinem Grund ist es sehr langsam, wenn es zu diesen Dimensionen kommt (wie etwa 2 Minuten, nur um zu plotten). Was ist der Grund dafür? Würde das Konvertieren der Gleitkommawerte in int16 oder so helfen? Gibt es Alternativen zu pcolor?
%Vor%data.txt enthält das Array. Der Ladevorgang dauert einige Sekunden, aber die Hauptrechenzeit wird definitiv von der Funktion pcolor () und show () verwendet (ungefähr 60-90 Sekunden).
imshow
wird viel schneller sein. pcolor
gibt eine PolyCollection zurück, die mit einer Million Elementen ziemlich langsam ist, wohingegen imshow nur ein Bild ist.
Beachten Sie, dass die Indizierung in pcolor etwas anders ist als imshow, obwohl Sie sich darüber möglicherweise keine Gedanken machen müssen, je nachdem, wie Sie pcolor verwendet haben. Auch wenn man von Pcolor zu Imshow geht, möchte man interpolation="nearest"
in imshow setzen (aber für so große Bilder ist das auch egal).
Als eine Notiz für zukünftige Googler gibt es auch pcolormesh
und pcolorfast
.
Die Dokumentation für pcolormesh
besagt Folgendes:
pcolormesh ist ähnlich wie pcolor (), verwendet aber einen anderen Mechanismus und gibt ein anderes Objekt zurück; pcolor gibt eine PolyCollection aber zurück pcolormesh gibt ein QuadMesh zurück. Es ist viel schneller, so ist es fast immer für große Arrays bevorzugt.
imshow
sollte noch schneller sein, ist aber etwas weniger flexibel in Bezug auf z.B nicht geradlinige Achsen.
Siehe diese Seite für ein nettes Vergleich zwischen pcolor
, pcolormesh
und imshow
.
Tags und Links python matplotlib numpy