-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Il 18/11/2011 09:06, Matteo Perini ha scritto: > > ho una funzione fp non lineare che deve essere ottimizzata... > fp = lambda v, x,y, > phi:(1+v[0]*phi+v[1]*x+v[2]*x*phi+v[3]*y+v[4]*y*phi+v[5]*x**2... > +v[6]*phi*x**2+v[7]*y**2+v[8]*phi*y**2+v[9]*x*y+v[10]*phi*x*y)/(v[11]+v[12]*phi... > > > +v[13]*x+v[14]*x*phi+v[15]*y+v[16]*y*phi+v[17]*x**2+v[18]*phi*x**2+v[19]*y**2... > > > +v[20]*phi*y**2+v[21]*x*y+v[22]*phi*x*y) > > [...] > Questo punto mi interessa molto e ci avevo già pensato ma non avevo > trovato il modo di semplificare. >
http://paste.pocoo.org/show/509927/ Ma attenzione che potrebbe contenere degli errori. > Ho la funzione fp del tipo numeratore/denominatore dove numeratore e > denominatore sono dei polinomi di secondo grado. > > Proverò con il suggerimento di usare la def al posto di lambda (può > aiutare per le prestazioni?) > Credo che potrebbe farti guadagnare un massimo del 10%. Se il tempo impiegato è ancora troppo lungo, l'unico consiglio che posso darti è di riscrivere il tutto in C. Per il tuo problema si trovano diverse implementazioni in C, vedi ad esempio: http://en.wikipedia.org/wiki/Levenberg–Marquardt_algorithm Purtroppo il tuo è un caso abbastanza "sfortunato". L'implementazione dell'algoritmo in SciPy è un semplice wrapper di una funzione scritta in Fortran (minpack), e che quindi dovrebbe essere abbastanza efficiente. Il problema è che viene chiamata la tua funzione, scritta in Python, moltissime volte all'interno di un ciclo. Le chiamate a funzione in Python sono abbastanza onerose; di solito non è un problema ma nel tuo caso lo è. Non dovrebbe essere un problema riscrivere parte del codice in C e misurare di quanto migliorano le prestazioni. Magari mi sbaglio ed il collo di bottiglia non è dove io penso che sia. > [...] Ciao Manlio -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk7Gvr4ACgkQscQJ24LbaUQgywCeKp/VGVX72waz3LZQMqympFws RT0AnAkNxxhYuVXY7j3fYK/ICdqz3EsN =TLaS -----END PGP SIGNATURE----- _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python