On 2012-09-17 17:21, Antonio Piepoli wrote:
def choose(p):
    r = random.random()
    index = 0
    while (r > 0):
      r -= probs[index]
      index += 1
    return index-1

Hai sbagliato nome di variabile: p/probs. Non so se è un errore di copia e incolla nella mail. Comunque carina: ora è una funzione più generica a cui passi solo il vettore di probabilità e ti restituisce l'indice di quella scelta. Non male.

Io l'avrei scritta così, ma è solo una questione idiomatica: funzionano allo stesso modo:

    def choose2(probs):
        r = random.random()
        for i, p in enumerate(probs):
            r -= p
            if r < 0:
                return i

Ha lo stesso problema di essere o(n) nel numero di elementi da scegliere, mentre la mia soluzione nella prima mail era o(1), ma credo sia ininfluente per te, e la mia aveva svantaggi di altro tipo.

--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a