veces una simule simular simulacion que programa probabilidad para moneda lanzar lanzamiento algoritmo python random coin-flipping

una - ¿Cómo simulo un lanzamiento de moneda sesgada en python?



simulacion del lanzamiento de una moneda en java (5)

En cambio de moneda imparcial, H o T ocurre el 50% de las veces.

Pero quiero simular una moneda que da H con probabilidad ''p'' y T con probabilidad ''(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]


¿Desea que el "sesgo" se base en la distribución simétrica? O tal vez la distribución exponencial? Gaussian a nadie?

Bueno, aquí están todos los métodos, extraídos de la documentación al azar en sí.

Primero, un ejemplo de distribución triangular:

print random.triangular(0, 1, 0.7)

random.triangular(low, high, mode) :

Devuelve un número aleatorio de punto flotante N tal que low <= N < high y con el modo especificado entre esos límites. Los límites low y high defecto son cero y uno . El argumento de mode predeterminada 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 varían 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 se llamaría " lambda ", pero es una palabra reservada en Python.) Los valores devueltos van de 0 a infinito positivo 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 gaussiana. mu es la media, y sigma es la desviación estándar. Esto es ligeramente más rápido que la función de normalvariate() definida a continuación.

random.lognormvariate(mu, sigma) :

Registre la distribución normal. Si toma el logaritmo natural de esta distribución, obtendrá una distribución normal con media mu y desviación estándar 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 se reduce a un ángulo aleatorio uniforme en el rango 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.


Qué tal si:

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


random.random() devuelve un número de punto flotante pseudoaleatorio distribuido uniformemente en el rango [0, 1). Este número es menor que un número dado p en el rango [0,1) con probabilidad p . Así:

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


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

Eso devuelve un valor booleano que luego puede usar 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 esa manera.


  • Importe un número aleatorio entre 0 - 1 (puede usar la función randrange)

  • Si el número está arriba (1-p), devuelve las colas.

  • De lo contrario, devolver cabezas