<p dir="ltr">Ciao,<br>
Non sono sicuro di aver capito bene il problema, ma provo a dirti dove credo tu stia sbagliando.</p>
<p dir="ltr">On Apr 29, 2016 08:41, "Francesca Senatore" <<a href="mailto:francesca.senatore1983@gmail.com">francesca.senatore1983@gmail.com</a>> wrote:</p>
<p dir="ltr">> from numpy as np <br>
> for num in range(300):<br>
> a = 5.6e3 <br>
> b = 2.5e6 <br>
> probs = [0.88514, 0.0946, 0.006757, 0.01351]<br>
> cutoffs = np.cumsum(probs)<br>
> temp = (b-a)*rand.uniform(0, cutoffs[-1])+a</p>
<p dir="ltr">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</p>
<p dir="ltr">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.</p>
<p dir="ltr">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.</p>
<p dir="ltr">Per esempio (scrivo il codice al volo dal cellulare, potrebbe avere bugs :p)</p>
<p dir="ltr">nu = random.uniform(0,1)<br>
for i, p in enumerate(cutoffs):<br>
    if p >= nu:<br>
        print('trovato', i)<br>
        break</p>
<p dir="ltr">Se ad esempio estrai 0.1 questo sarà più piccolo di cutoffs[0] e quindi stampa 0. <br>
Se estrai 0.9, questo sarà più grande di cutoffs[0], ma non di cutoffs[1], quindi stampa 1, e così via. </p>
<p dir="ltr">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 :)</p>
<p dir="ltr">Ciauz<br>
~Ale</p>