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.senatore1...@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
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python