2017-09-13 1 views
0

J'utilise norm.ppf() en Python pour calculer la distribution cumulative inverse normale, mais je l'ai trouvé beaucoup plus lent que le norminv() dans Matlab.Comment calculer la fonction de distribution cumulative inverse normale efficacement en Python

for i in range(10000): 
    iri_next = norm.ppf(0.4, loc=0, scale=0.06) 

coûte environ 2 secondes en Python, alors que

for i=1:10000 
    IRI_next=norminv(0.4,0,0.06); 
end 

coût d'environ 0,6 deuxième Matlab

Y at-il un moyen efficace de calculer inverse normale distribution cumulative en Python?

+0

Une petite suggestion est d'utiliser python pour appeler la fonction AC Je ne crois pas que python atteindra jamais les mêmes vitesses de matlabs en raison du moteur sous-jacent en C/C++ – Andrei

+0

Pourquoi appeler la fonction 10000 fois si la valeur retournée est toujours la même? –

+0

Mesurez-vous vraiment les différences entre 'ppf' et' norminv', ou simplement la différence entre une boucle Python et une boucle Matlab? Essayez une autre opération dans la boucle, peut-être même un "pas d'opération" (c'est-à-dire "pass" en Python) à vérifier. –

Répondre

2

Abstraction faite du fait que l'appel de la fonction 10000 fois avec les mêmes valeurs vous donnera 10000 fois la même valeur retournée, vous pouvez passer un tableau comme premier argument et obtenir 10000 valeurs à la fois

scipy.stats.norm.ppf(numpy.full(10000, 0.4), loc=0, scale=0.06) 

en 0.006 secondes sur ma machine

+0

De cette façon, c'est très rapide. Merci! – GFD