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