Schneller durch jedes Pixel eines Bildes in Python?

8

Ich muss jedes Pixel eines 2D numpy Arrays (Bild) von 2560x2160 durchlaufen. Eine vereinfachte Version meines Problems ist wie folgt:

%Vor%

Dies dauert ~ 30 Sekunden auf meinem Computer. (Core i7, 8GB RAM) Gibt es einen schnelleren Weg, diese Schleife mit einer 'if' Anweisung im Inneren auszuführen? Ich interessiere mich nur für Pixel oberhalb einer bestimmten Grenze, aber ich brauche ihre (x, y) Indizes und Werte.

    
dinkelk 22.10.2012, 01:30
quelle

2 Antworten

13

Verwenden Sie eine boolesche Matrix:

%Vor%     
nneonneo 22.10.2012, 01:31
quelle
6

Versuchen Sie zunächst, die Vektorisierungsberechnung zu verwenden:

%Vor%

Wenn Ihr Problem nicht durch Vektorberechnung gelöst werden kann, können Sie die for-Schleife beschleunigen:

%Vor%

oder:

%Vor%

Die Zahl numpy.ndenumerate ist langsam. Wenn Sie die normale for-Schleife verwenden und den Wert von array by item method erhalten, können Sie die Schleife um 4x beschleunigen.

Wenn Sie mehr Geschwindigkeit benötigen, versuchen Sie, Cython zu verwenden, es macht Ihren Code so schnell wie C-Code.

    
HYRY 22.10.2012 02:02
quelle

Tags und Links