2017-05-15 1 views
2

Je ne pouvais pas trouver une fonction intégrée en Python pour générer une distribution uniforme du journal donné une valeur min et max (l'équivalent R est here), quelque chose comme: loguni [n, exp (min), exp (max), base] qui renvoie n log réparti uniformément dans la plage exp (min) et exp (max).Comment générer une distribution uniforme des journaux en Python?

Le plus proche que j'ai trouvé était numpy.random.uniform.

+0

Votre lien ne fonctionne pas. En dehors de cela: consultez [scipy.stats] (https://docs.scipy.org/doc/scipy/reference/stats.html) (numpy fournit uniquement les dists communs nécessaires). Et si scipy ne le fournit pas, implémentez-le vous-même, peut-être en fonction de votre équivalent R ou en faisant quelque chose comme l'acceptation-rejet qui est facile la plupart du temps (mais pas nécessairement le plus rapide). – sascha

+0

Merci de le signaler! Lien modifié, cela devrait fonctionner. – jkrish

+0

Vous pourriez juste exponentiate la distribution uniforme. –

Répondre

4

De http://ecolego.facilia.se/ecolego/show/Log-Uniform%20Distribution:

In a loguniform distribution, the logtransformed random variable is assumed to be uniformly distributed.

Ainsi

logU(a, b) ~ exp(U(log(a), log(b)) 

Ainsi, nous pourrions créer une distribution log-uniforme à l'aide numpy:

def loguniform(low=0, high=1, size=None): 
    return np.exp(np.random.uniform(low, high, size)) 

Si vous voulez choisir une autre base , nous pourrions définir une nouvelle fonction comme suit:

def lognuniform(low=0, high=1, size=None, base=np.exp(1)): 
    return np.power(base, np.random.uniform(low, high, size)) 
+0

Ceci est dangereux. Cela donnera un 'RuntimeWarning' que vous divisez par zéro quand 0.0 est dessiné. –

+0

Merci! Donc, si je veux que le min et le max de la distribution soient entre 1 et 1000, sont-ils mes bas et haut ici ou leurs exponentielles? – jkrish

+0

@aryamccarthy Vrai! Cependant ma distribution aurait des valeurs> 0.0 donc je pourrais le manipuler comme une exception. – jkrish