[Python] np.random aiuto!!!
Stefano Dal Pra
s.dalpra a gmail.com
Sab 30 Apr 2016 15:46:06 CEST
Se ho capito vuoi estrarre dei valori "vals" con le probabilita' "probs".
Io ho provato cosi':
import random
#vale: sum(probs) == 1.0
probs = [0.88514, 0.0946, 0.006757, 0.01351]
vals = range(len(probs))
t = zip(probs,vals)
def myrnd():
cs,x = 0,random.random()
for k,v in t:
cs += k
if x <= cs : return v
return v
E myrnd ti restituisce 0 con probabilita' 0.88514,
1con prob. 0.0946 eccetera.
Per verificare se piu' o meno ci siamo facciamo un milione di prove
e vediamo le le frequenze sono in linea con le probabilita':
#Test:
dt = dict(zip(vals,[0 for x in vals]))
N = 1000000
for n in range(N):
k = myrnd()
dt[k] += 1
for k,v in dt.items():
print k,(v+0.0)/N
e a me da
0 0.884842
1 0.094789
2 0.006818
3 0.013551
Se confronti con
probs = [0.88514, 0.0946, 0.006757, 0.01351]
direi che ci siamo.
Stefano
2016-04-30 13:59 GMT+02:00 Christian Barra <barrachri a gmail.com>:
> 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.
>
> Credo che il link faccia al caso suo.
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20160430/1df63b1f/attachment.html>
Maggiori informazioni sulla lista
Python