2009-01-25 13 views
22

En cambio de monedas sin sesgo H o T ocurre el 50% de las veces.¿Cómo simulo un lanzamiento de moneda sesgada en pitón?

Pero desea simular moneda que da H con una probabilidad de 'p' y T con una probabilidad de '(1-p)'.

algo como esto:

def flip(p): 
    '''this function return H with probability p''' 
    # do something 
    return result 

>> [flip(0.8) for i in xrange(10)] 
[H,H,T,H,H,H,T,H,H,H] 

Respuesta

41

random.random() devuelve un uniformemente distribuida al azar pseudo-número de punto flotante en el rango [0 volver, 1). Este número es menor que un número dado p en el rango [0,1) con probabilidad p. Por lo tanto:

def flip(p): 
    return 'H' if random.random() < p else 'T' 

Algunos experimentos:

>>> N = 100 
>>> flips = [flip(0.2) for i in xrange(N)] 
>>> float(flips.count('H'))/N 
0.17999999999999999 # Approximately 20% of the coins are heads 

>>> N = 10000 
>>> flips = [flip(0.2) for i in xrange(N)] 
>>> float(flips.count('H'))/N 
0.20549999999999999 # Better approximation 
+1

+1: si mejor que '{Verdadero: 'H', Falso: 't'} [random.random()

4
import random 
def flip(p): 
    return (random.random() < p) 

que devuelve un valor lógico que luego se puede utilizar para elegir H o ​​T (o elegir entre dos valores) que desee. También podría incluir la opción en el método:

def flip(p): 
    if random.random() < p: 
     return 'H' 
    else: 
     return 'T' 

pero sería menos útil en general de esta manera.

0
  • Importar un número aleatorio entre el 0 - 1 (se puede utilizar la función randrange)

  • Si el número es superior a (1-p), colas volver.

  • Else, cabezas

8

¿Quieres que el "sesgo" que basarse en distribuition simétrica? O tal vez la distribución exponencial? Gaussian a nadie?

Bueno, aquí son todos los métodos, extraídos de la propia documentación al azar.

En primer lugar, un ejemplo de la distribución triangular:

print random.triangular(0, 1, 0.7) 

random.triangular(low, high, mode):

devolver un número aleatorio de punto flotante N tal que low <= N < high y con el modo especificado entre esos límites. El low y high límites por defecto a cero y uno . Los mode de argumentos por defecto en el punto medio entre los límites , dando una distribución simétrica .

random.betavariate(alpha, beta):

distribución beta. Las condiciones en los parámetros son alpha > 0 y beta > 0.Los valores devueltos oscilan entre 0 y 1.

random.expovariate(lambd):

distribución exponencial. lambd es 1.0 dividido por la media deseada. Debería ser distinto de cero. (El parámetro sería llamado “lambda”, pero eso es una palabra reservada en Python.) Volvió valores van de 0 a positivo infinito si lambd es positivo, y de infinito negativo a 0 si lambd es negativo.

random.gammavariate(alpha, beta):

distribución Gamma. (¡No la función gamma !) Las condiciones en los parámetros son alpha > 0 y beta > 0.

random.gauss(mu, sigma):

distribución de Gauss. mu es la media, y sigma es la desviación estándar de . Esto es ligeramente más rápido que la función normalvariate() que se define a continuación.

random.lognormvariate(mu, sigma):

Log distribución normal. Si se toma el logaritmo natural de esta distribución , obtendrá una distribución normal con media mu y el estándar desviación sigma. mu puede tener cualquier valor , y sigma debe ser mayor que cero.

random.normalvariate(mu, sigma):

distribución Normal. mu es la media, y sigma es la desviación estándar.

random.vonmisesvariate(mu, kappa):

mu es el ángulo medio, expresado en radianes entre 0 y 2*pi, y kappa es el parámetro de concentración, que debe ser mayor que o igual a cero . Si kappa es igual a cero , esta distribución reduce a un ángulo aleatorio uniforme sobre el intervalo de 0 a 2*pi.

random.paretovariate(alpha):

distribución de Pareto. alpha es el parámetro de forma .

random.weibullvariate(alpha, beta)

distribución de Weibull. alpha es el parámetro de escala y beta es el parámetro de forma .

+3

Muy informativo. –

3

¿Qué tal:

import numpy as np 
n, p = 1, .33 # n = coins flipped, p = prob of success 
s = np.random.binomial(n, p, 100) 
Cuestiones relacionadas