[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