<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2016-04-30 17:28 GMT+02:00 Francesca Senatore <span dir="ltr"><<a href="mailto:francesca.senatore1983@gmail.com" target="_blank">francesca.senatore1983@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Ciao ragazzi, <div>vi ringrazio per i vostri consigli. Scusate se rispondo solo ora ma causa influenza sono costretta a letto.</div><div><br></div><div>Avete ragione! Non credo di essermi spiegata molto bene. Cerco di spiegarmi meglio dicendovi cosa esattamente devo fare. Io voglio simulare una distribuzione di exposures (a e b sono secondi di osservazione da 5.6e3 a 2.5e6 secondi). La distribuzione che devo simulare è fatta in questo modo: </div><div><br></div><div>l' 88.5% delle exposures cade nell'intervallo [2.5e6,1e5]</div><div>il 9.5% delle exposure cade nell'intervallo [1e5,2.5e4]</div><div>0.7% delle exposures cade nell'intervallo [2.5e4,1.1e4]</div><div>1.4% delle exposures cade nell'intervallo [1.1e4,6.3e3]</div><div><br></div></div></blockquote><div><br></div><div>Io cambierei cosi' il pezzo di codice messo prima:<br><br>probs = [0.88514, 0.0946, 0.006757, 0.01351]<br>vals = [(1e5,2.5e6),(2.5e4,1e5),(1.1e4,2.5e4),(6.3e3,1.1e4)]<br>t = zip(probs,vals)<br>def myrnd():<br> cs,x = 0,random.random()<br> for k,v in t:<br> cs += k<br> if x <= cs :<br> return v[0] + x * (v[1]-v[0]) <br> return v[0] + x * (v[1]-v[0])<br><br><br></div><div>In pratica : x e' un random tra 0 e 1;<br></div><div>guardando probs trovi in quale segmento si trova<br></div><div>se e' il secondo, trasformi x per essere un random<br></div><div>all'interno di quel segmento:<br><br></div><div><offset> + x * <ampiezza del segmento><br></div><div><br></div><div>Puo' andare?<br></div><div>Stefano<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div></div><div>Sulla base di questo, la cosa più giusta da fare mi è sembrata quella di generare numeri random seguendo questa distribuzone di probabilità. </div><div>np.random.choice fa una cosa di questo genere ma non so come applicarla ai miei intervalli. Se io considero il vettore [1,2,3,4] e associo le mie probabilità ottengo l'88.5% delle volte 1, 9.5% delle volte 2 eccc. Questo è ciò che fa choice!!!</div><div>Io invece voglio che l' 88.5% delle volte vengano generati numeri nel primo intervallo, il 9.5% delle volte nel secondo intervallo, e così via. Credo che devo usare un diverso approccio. Il tutto è complicato dal fatto che non sono una cima in programmazione e in python. </div><div>Spero di essere stata più chiara ora. Ovviamente se avete delle dritte da darmi sono bene accette. </div><div>Ciao e grazie ancora. </div><div><br></div><div>Fra</div></div><div class=""><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">Il giorno 30 aprile 2016 15:46, Stefano Dal Pra <span dir="ltr"><<a href="mailto:s.dalpra@gmail.com" target="_blank">s.dalpra@gmail.com</a>></span> ha scritto:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div>Se ho capito vuoi estrarre dei valori "vals" con le probabilita' "probs".<br></div>Io ho provato cosi':<br><br>import random<br><br></div>#vale: sum(probs) == 1.0<br><div><div><span>probs = [0.88514, 0.0946, 0.006757, 0.01351]<br></span>vals = range(len(probs))<br>t = zip(probs,vals)<br><br>def myrnd():<br> cs,x = 0,random.random()<br> for k,v in t:<br> cs += k<br> if x <= cs : return v<br> return v<br><br></div><div>E myrnd ti restituisce 0 con probabilita' 0.88514, <br></div><div>1con prob. 0.0946 eccetera.<br></div><div><br>Per verificare se piu' o meno ci siamo facciamo un milione di prove<br></div><div>e vediamo le le frequenze sono in linea con le probabilita':<br></div><div><br>#Test:<br>dt = dict(zip(vals,[0 for x in vals]))<br>N = 1000000 <br>for n in range(N):<br> k = myrnd()<br> dt[k] += 1<br><br>for k,v in dt.items():<br> print k,(v+0.0)/N<br><br></div><div>e a me da<br>0 0.884842<br>1 0.094789<br>2 0.006818<br>3 0.013551<br><br></div><div>Se confronti con <br></div><span><div>probs = [0.88514, 0.0946, 0.006757, 0.01351]<br><br></div></span><div>direi che ci siamo.<span><font color="#888888"><br></font></span></div><span><font color="#888888"><div>Stefano<br></div></font></span></div></div><div class="gmail_extra"><br><div class="gmail_quote"><span>2016-04-30 13:59 GMT+02:00 Christian Barra <span dir="ltr"><<a href="mailto:barrachri@gmail.com" target="_blank">barrachri@gmail.com</a>></span>:<br></span><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span><p dir="ltr">A me pare che lei abbia una serie di eventi con probabilità note (il suo vettore) e gli interessa generare numeri secondo quella distribuzione di probabilità, in pratica generare sample da una funzione di probabilità che ha definito lei. </p>
<p dir="ltr">Credo che il link faccia al caso suo. </p>
<br></span><span>_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it" target="_blank">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" rel="noreferrer" target="_blank">http://lists.python.it/mailman/listinfo/python</a><br>
<br></span></blockquote></div><br></div>
<br>_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it" target="_blank">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" rel="noreferrer" target="_blank">http://lists.python.it/mailman/listinfo/python</a><br>
<br></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" rel="noreferrer" target="_blank">http://lists.python.it/mailman/listinfo/python</a><br>
<br></blockquote></div><br></div></div>