Python numpy.random.normal只有正值

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)

wim*_*wim 6

根据定义,正态分布从-inf扩展到+ inf,因此您要求的数学在数学上没有意义.

您可以采用正态分布并将绝对值"剪切"为正值,或者只是丢弃负值,但您应该理解它将不再是正态分布.

  • 该问题与您希望仅保留正态分布中的正值但希望在定义中定义数组大小的情况相匹配。这个问题确实有意义并且有效。 (3认同)
  • “根据定义,正态分布从 -inf 延伸到 +inf ...”,这并不意味着您无法在数值上获得剪切/偏心/x 偏移分布。这种情况可能会出现在典型的光谱探测器中。在使用 np.random.normal(fix_mean,fix_sigma) 绘制每个数字后,您仍然可以检查非负条件并绘制一个新的。 (2认同)

Gen*_*sev 5

我假设您的意思是您想要修改概率密度,使其在正范围内与正常形状相同,在负范围内为零。这是一个很常见的实际案例。在这种情况下,您不能简单地取生成的正态随机变量的绝对值。相反,您必须生成一个新的独立正态分布数,直到得出正数为止。一种方法是递归地执行此操作,请参见下文。

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))