ust*_*etz 10 python numpy normal-distribution
我想用numpy.random.normal创建一个只包含正值的普通分布式数组.例如,以下说明它有时会给出负值,有时会给出正值.如何修改它以便只返回正值?
>>> 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 ])
>>>
Run Code Online (Sandbox Code Playgroud)
我想我可以这样解决它:
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)
Run Code Online (Sandbox Code Playgroud)
根据定义,正态分布从-inf扩展到+ inf,因此您要求的数学在数学上没有意义.
您可以采用正态分布并将绝对值"剪切"为正值,或者只是丢弃负值,但您应该理解它将不再是正态分布.
我假设您的意思是您想要修改概率密度,使其在正范围内与正常形状相同,在负范围内为零。这是一个很常见的实际案例。在这种情况下,您不能简单地取生成的正态随机变量的绝对值。相反,您必须生成一个新的独立正态分布数,直到得出正数为止。一种方法是递归地执行此操作,请参见下文。
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))