3 Réponses :


4
votes

Vous pouvez écrire une fonction Cython pour accélérer le calcul, la première chose à faire consiste à obtenir l'adresse de la fonction Fortran SPHJ code>, voici comment faire cela dans Python:

10 loops, best of 3: 44.7 ms per loop
1 loops, best of 3: 231 ms per loop


0 commentaires

1
votes

Il y a un Demande de traction incorporant des routines de fonction de bourses sphériques vectorisées dans SciPy comme scipy.special.sphérical_x code>, avec x = jn, yn, in, kn code>. Avec une peu de chance, ils devraient entrer dans la version 0.18.0.

L'amélioration des performances sur np.vectoriser code> (c'est-à-dire une boucle de boucle) dépend de la fonction, mais peut être des ordres de Magnitude. P>

import numpy as np
from scipy import special

@np.vectorize
def sphj_vectorize(n, z):
    return special.sph_jn(n, z)[0][-1]

x = np.linspace(1, 2, 10**5)

%timeit sphj_vectorize(4, x)
1 loops, best of 3: 1.47 s per loop

%timeit special.spherical_jn(4, x)
100 loops, best of 3: 8.07 ms per loop


0 commentaires

3
votes

Au cas où n'importe qui est toujours intéressé, j'ai trouvé une solution près de 17 fois plus rapidement que celle de Ted Pudlik. J'ai utilisé le fait qu'une fonction de bessel sphérique de commande n est essentiellement 1 / sqrt (x) fois une fonction de bourse standard de commande n + 1/2, déjà vectorisée: xxx

i obtenu les horaires suivants: xxx


0 commentaires