Aplica una función a cada elemento de un arreglo en Python.
Estoy intentando hacer dos cosas en Python:
1. Simular 100 extracciones aleatorias de una distribución de Poisson. Lo he hecho de la siguiente manera:
sample100 = poisson.rvs(mu=5,size=100)
- Tomar la muestra anterior y aplicar una prueba UMP que he generado a cada observación individual (es decir, probar la hipótesis contra cada observación individual). La prueba debe aceptar la hipótesis nula si la observación tiene un valor < 8; rechazar con una probabilidad del ~50% si la observación tiene un valor = 8; rechazar si la observación tiene un valor > 8.
No puedo entender cómo hacer la segunda parte de esto. El código de la función que he creado es:
def optionaltest(y,k,g):
if (y > k):
return 1
if (y == k):
if np.random.uniform(0,1) >= 0.4885: return 1
else: return 0
if (y < k):
return 0
Pero hay dos problemas: aparentemente, la condición (y == k) es una sintaxis inválida. Segundo, incluso si elimino esa parte, no puedo aplicar la función a sample100 ya que es una matriz.
¿Cómo puedo modificar esto para que funcione? Claramente, soy muy nuevo en Python, pero he estado buscando en internet durante horas. ¿Quizás debería cambiar la forma en que genero mis datos de muestra para poder aplicar una función a ellos? ¿Quizás hay una forma de aplicar una función a cada elemento de una matriz? ¿Cómo puedo hacer que la lógica de la prueba funcione cuando la salida = k (que en este caso estableceré en 8)?
EDIT/ACTUALIZACIÓN:
Así es como terminé haciéndolo:
def optionaltest(y):
if (y > 8):
return 1
if (y == 8):
if np.random.uniform(0,1) >= 0.4885: return 1
else: return 0
if (y < 8):
return 0
pude aplicar esa prueba a mis datos de matriz a través de:
results_sample100 = list(map(optionaltest, sample100))
cl.Counter(results_sample100)
davy.ai
Para aplicar la prueba UMP a cada observación individual en
sample100
, puedes usar la funciónmap
para aplicar la funciónoptionaltest
a cada elemento del arreglo. Aquí tienes un ejemplo:En este ejemplo, he modificado la función
optionaltest
para usarnp.random.uniform
en lugar derand(uniform(0,1))
. También he eliminado el parámetrog
ya que no se utiliza en la función.Para usar
map
, se pasa la función (optionaltest
) como primer argumento y el arreglo (sample100
) como segundo argumento.map
aplicará la función a cada elemento del arreglo y devolverá una lista con los resultados.Finalmente, para contar el número de veces que se aceptó o rechazó la hipótesis nula, puedes usar la función
Counter
del módulocollections
:Esto devolverá un objeto similar a un diccionario donde las claves son los valores de retorno de
optionaltest
(0 o 1) y los valores son las cuentas de cada valor de retorno.