[Python] np.random aiuto!!!

Alessandro Re akirosspower a gmail.com
Ven 29 Apr 2016 10:50:29 CEST


Ciao,
Non sono sicuro di aver capito bene il problema, ma provo a dirti dove
credo tu stia sbagliando.

On Apr 29, 2016 08:41, "Francesca Senatore" <
francesca.senatore1983 a gmail.com> wrote:

> from numpy as np
> for num in range(300):
> a = 5.6e3
> b = 2.5e6
> probs = [0.88514, 0.0946, 0.006757, 0.01351]
> cutoffs = np.cumsum(probs)
> temp = (b-a)*rand.uniform(0, cutoffs[-1])+a

A parte che non è ben chiaro cosa siano a e b, rand.uniform(0,1) genera un
numero casuale in [0,1) direi... Quindi non ottieni affatto quello che
volevi :D

Una volta calcolato il vettore con le probabilità cumulate, devi usarlo!
Ora, estratto un numero casuale tra 0 e 1 con distribuzione uniforme, quel
vettore ti dice che lo 88.5% delle volte quel numero casuale sarà più
piccolo del primo elemento del vettore, il 97.9% (88.5% + 9.4%) delle volte
più piccolo del secondo elemento, eccetera fino alle 100% delle volte più
piccolo dell'ultimo elemento.

Quindi quando hai estratto un numero a caso in [0,1], devi andare a cercare
nel tuo vettore di cumulate qual è la posizione del vettore che contiene il
più grande numero non più grande di quello estratto.

Per esempio (scrivo il codice al volo dal cellulare, potrebbe avere bugs :p)

nu = random.uniform(0,1)
for i, p in enumerate(cutoffs):
    if p >= nu:
        print('trovato', i)
        break

Se ad esempio estrai 0.1 questo sarà più piccolo di cutoffs[0] e quindi
stampa 0.
Se estrai 0.9, questo sarà più grande di cutoffs[0], ma non di cutoffs[1],
quindi stampa 1, e così via.

Spero di averti chiarito dove sta l'errore, ma se le funzioni che ti hanno
consigliato gli altri fanno ciò che ti serve, usa quelle :)

Ciauz
~Ale
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20160429/db877513/attachment.html>


Maggiori informazioni sulla lista Python