我想用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 ])
>>>
字符串
我想我可以像这样解决它:
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)
型
9条答案
按热度按时间ztigrdn81#
根据定义,正态分布从-inf扩展到+inf,因此您所要求的在数学上没有意义。
你可以取一个正态分布,然后取绝对值“裁剪”到正值,或者只是丢弃负值,但你应该明白,它将不再是正态分布。
xggvc2p62#
我假设你的意思是你想修改概率密度,使它在正范围内与正常情况下的形状相同,而在负范围内为零。这是一个非常常见的实际案例。在这种情况下,不能简单地取生成的正态随机变量的绝对值。相反,你必须生成一个新的独立的正态分布数,直到你得到一个正数。一种方法是递归,见下文。
第一个月
pprl5pva3#
如何使用对数正态分布:
字符串
cs7cruho4#
data = np.random.randint(low=1,high=100,size=(4,4),dtype='int')
t30tvxxf5#
或者你可以通过减去min(或加上min的abs瓦尔)来将整个分布“向右移动”:
字符串
fykwrbwg6#
这个问题是合理的。对于动机,考虑simulations of biological cells。细胞中一种类型的分子的计数的分布可以通过正态分布来近似,但必须是非负的才有物理意义。
我的全模拟器使用这种方法来采样分子计数的初始分布:
字符串
我从两个方面来扩展@ gena-kukartsev的答案:首先,我避免了可能使调用堆栈溢出的递归。(让我们避免可能溢出stackoverflow堆栈的答案!第二,我通过限制分布的样本数量来捕捉可能的错误输入。
0s7z1bwu7#
您可以将整个数组偏移数组的最小值(最左侧)。你得到的可能不是真正的“正态分布”,但是在你的工作范围内,处理有限数组,你可以确保值是正的,并且符合钟形曲线。
字符串
laawzig28#
您可以使用高位置和低比例:
字符串
hrysbysz9#
字符串