Python numpy.random.normal solo valores positivos

Quiero crear una matriz distribuida normal con numpy.random.normal que solo consiste en valores positivos. Por ejemplo, lo siguiente ilustra que a veces devuelve valores negativos y otras veces positivos. ¿Cómo puedo modificarlo para que solo devuelva valores positivos?

>>> import numpy >>> numpy.random.normal(10,8,3) array([ -4.98781629, 20.12995344, 4.7284051 ]) >>> numpy.random.normal(10,8,3) array([ 17.71918829, 15.97617052, 1.2328115 ]) >>> 

Supongo que podría resolverlo de alguna manera así:

 myList = numpy.random.normal(10,8,3) while item in myList <0: # run again until all items are positive values myList = numpy.random.normal(10,8,3) 

La distribución normal, por definición, se extiende desde -inf a + inf, por lo que lo que está pidiendo no tiene sentido matemáticamente.

Puede tomar una distribución normal y el valor absoluto para “recortar” valores positivos, o simplemente descartar valores negativos, pero debe comprender que ya no será una distribución normal.

Puede compensar toda su matriz con el valor más bajo (más a la izquierda) de la matriz. Es posible que lo que obtenga no sea realmente una “distribución normal”, pero dentro del scope de su trabajo, al tratar con una matriz finita, puede asegurarse de que los valores sean positivos y se ajusten a una curva de campana.

 >>> mu,sigma = (0,1.0) >>> s = np.random.normal(mu, 1.0, 100) >>> s array([-0.58017653, 0.50991809, -1.13431539, -2.34436721, -1.20175652, 0.56225648, 0.66032708, -0.98493441, 2.72538462, -1.28928887]) >>> np.min(s) -2.3443672118476226 >>> abs(np.min(s)) 2.3443672118476226 >>> np.add(s,abs(np.min(s))) array([ 1.76419069, 2.85428531, 1.21005182, 0. , 1.14261069, 2.90662369, 3.00469429, 1.3594328 , 5.06975183, 1.05507835]) 

Supongo que lo que quiere decir es que desea modificar la densidad de probabilidad de modo que tenga la misma forma que la normal en el rango positivo y cero en el negativo. Ese es un caso práctico bastante común. En tal caso, no puede simplemente tomar el valor absoluto de las variables aleatorias normales generadas. En su lugar, debe generar un nuevo número independiente distribuido normalmente hasta que encuentre un número positivo. Una forma de hacerlo es recursivamente, ver más abajo.

import numpy as np def PosNormal(mean, sigma): x = np.random.normal(xbar,delta_xbar,1) return(x if x>=0 else PosNormal(mean,sigma))

¿qué pasa con el uso de lognormal en estas líneas:

  mu = np.mean(np.log(list)) sigma = np.std(np.log(list)) new_list = np.random.lognormal(mu, sigma, length_of_new_list) 

datos = np.random.randint (bajo = 1, alto = 100, tamaño = (4,4), dtype = ‘int’)