2016-07-26 14 views
0

Ich habe eine Summierung über 2 Indizes in einer 2D-Ebene und an jedem Punkt im Raum muss ich einen Wert einer Funktion erhalten.Mein Python-Programm effizienter machen

Der einfachste Weg und der einzige Weg, ich weiß, wie es geht, war mit 4 für Schleifen. Es funktioniert gut, aber es ist sehr langsam. Hast du irgendwelche Vorschläge, wie es schneller geht?

Beachten Sie, dass "size" den Schritt definiert, den ich verwende, und die Größe meines Systems in willkürlichen Einheiten ist und "n_0" eine Liste von Listen ist und ein Eingabeparameter ist, der auch von den Koordinaten x in y abhängig ist.

EDIT: Ich weiß nicht, warum das ein Duplikat markiert wurde, weil mein Problem mit meiner Syntax nicht prägnanter ist. Mein Problem ist, dass der Code, egal was die Syntax ist, ist O (n^4) und ich muss das reduzieren.

+0

einfach einige Zeit in Anspruch nehmen, um zu bestätigen, außer Betracht lassen Sie alle Koordinaten _outside_ Ihre Koordinaten System mit der Koordinate 'in range (size)' checks? Auch, was ist "N" definiert? –

+0

Es kann nicht viel helfen, aber sollte math.hypot statt quadrieren und berechnen Quadratwurzel manuell. – guidot

+0

Wie groß ist die typische "Größe"? Ich würde vorschlagen, numpy zu verwenden, da es erlaubt, die Berechnungen schneller durchzuführen, aber es würde erfordern, Vektoren im Gedächtnis zu speichern –

Antwort

0

Für Python 2.x xrange ist schneller als range und normalerweise (2.x und 3.x) ist es noch schneller

i=start 
while i<stop: 
    #do something 
    i+=1 

statt

for i in range(start,stop): 
    #do something 

, weil ein zu tun für -loop macht kompliziertere Sachen.

Auch ist es (etwas) schneller

import a 
c=[] 

def f(): 
    a_b_local=a.b 
    c_local=c 
    #some loop with a_b_local and c_local 

als

import a 
c=[] 

def f(): 
    #some loop with a.b and c 

zu tun, weil Name Lookups

Verwandte Themen