matplotlib.pcolor sehr langsam. Alternativen?

8

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).

    
Jakob 19.09.2011, 11:35
quelle

2 Antworten

9

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).

    
tom10 19.09.2011, 17:15
quelle
9

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 .

    
freidrichen 17.08.2015 10:37
quelle

Tags und Links