Ich versuche mit Python und Numpy / Scipy einen Bildverarbeitungsalgorithmus zu implementieren. Der Profiler sagt mir, dass viel Zeit in die folgende Funktion (oft aufgerufen) investiert wird, die mir die Summe der quadratischen Differenzen zwischen zwei Bildern angibt
%Vor%Wie kann ich das beschleunigen? Danke.
Nur
%Vor% (was ich erwarte, ist wahrscheinlich nur sum((A-B)**2)
, wenn die Form immer (, , 3) ist)
Sie können auch die Summenmethode verwenden: ((A-B)**2).sum()
Richtig?
Ich bin verwirrt, warum du i in range(3)
nimmst. Soll das das ganze Array sein oder nur ein Teil?
Insgesamt können Sie das meiste durch Operationen ersetzen, die in numpy definiert sind:
%Vor% Auf diese Weise können Sie anstelle von drei eine Operation ausführen und numpy.sum
kann die Addition möglicherweise besser optimieren als die eingebaute sum
.
Ich weiß nicht, ob die pow () Funktion mit Power 2 schnell sein wird. Probieren Sie:
%Vor%Nach der Antwort von Ritsaert Hornstra, die 2 negative Punkte bekommen hat (zugegebenermaßen habe ich sie nicht in ihrer ursprünglichen Form gesehen ...)
Das ist tatsächlich richtig.
Bei einer großen Anzahl von Iterationen kann es oft doppelt so lange dauern, den '**' Operator oder die pow (x, y) Methode zu verwenden, um die Paare einfach manuell zu multiplizieren. Falls notwendig, benutze die math.fabs () -Methode, wenn sie NaNs auswirft (was sie manchmal tut, besonders wenn du int16s verwendest usw.), und es dauert immer noch nur etwa die Hälfte der Zeit der beiden gegebenen Funktionen.
Nicht so wichtig für die ursprüngliche Frage, die ich kenne, aber definitiv wissenswert.
In Ruby-Sprache können Sie dies auf diese Weise erreichen
%Vor%Tags und Links python image-processing numpy scipy