Summe der Quadratdifferenzen (SSD) in numpy / scipy

7

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.

    
Internet man 17.02.2010, 21:43
quelle

5 Antworten

29

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?

    
Andrew Jaffe 17.02.2010, 21:47
quelle
1

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 .

    
Mike Graham 17.02.2010 21:50
quelle
1

Ich weiß nicht, ob die pow () Funktion mit Power 2 schnell sein wird. Probieren Sie:

%Vor%     
Ritsaert Hornstra 17.02.2010 21:47
quelle
1

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.

    
Duncan Tait 23.02.2010 15:41
quelle
-3

In Ruby-Sprache können Sie dies auf diese Weise erreichen

%Vor%     
Raza Hussain 29.01.2015 11:54
quelle