Was ich tun muss ist Wigner 3j Symbole ausrechnen (sympy.physics.wigner.wigner_3j) und anschließend über einen Index summieren. Die Summation scheint ein Performancefresser zu sein und ich würde es gerne durch eine Array-Operation ersetzen.
Beispielcode:
Code: Alles auswählen
from sympy.physics.wigner import wigner_3j
def funktion(l,ls,m):
min=abs(l-ls) # l und ls sind positive Integer
max=l+ls
U=0
for lss in xrange(min, max):
U+=wigner_3j( l , ls , lss , m , -m , 0 )
return U
funktion(10,4,0) # Beispiel
Hat jemand eine Idee, wie ich das schaffe, oder welche schnelleren Alternativen es gibt?
Eine Idee von mir war bisher das Wignersymbol zu "lambdifien", um es auf ein Array anwenden zu können, aber das habe ich nicht hinbekommen.
[EDIT] Was ich verschwiegen hatte ist, dass ich die gleichen Wigner-Symbole am laufenden Band für unterschiedliche Elemente einer Matrix berechne. Mein Performanceproblem ist also bereits gelöst, wenn ich einmal alle benötigten Wigner-Symbole berechne und diese in einem Array-speichere... so kann ich einfach Funktionen auf dieses Array verweisen, wenn sie ein 3j brauchen.