首先,numpy.random.rand(1) 不返回 [0,1) 范围内的 值(半开,包括零但不包括一),它返回一个大小为 1 的 数组, 包含该范围内的值,范围的上端与传入的参数无关。
您可能需要的函数是均匀分布函数numpy.random.uniform(),因为这将允许任意上限。
而且,使上半部分的可能性增加一倍是一件相对简单的事情。
以随机数生成器r(n) 为例,它返回[0,n) 范围内的均匀分布整数。您需要做的就是调整值以更改分布:
x = r(3) # 0, 1 or 2, @ 1/3 probability each
if x == 2:
x = 1 # Now either 0 (@ 1/3) or 1 (@ 2/3)
现在得到 0 的机会是 1/3,而得到 1 的机会是 2/3,这基本上是您尝试使用浮点值实现的目标。
所以我会简单地得到一个[0,1.5) 范围内的随机数,如果大于或等于 1,则减去 0.5。
x = numpy.random.uniform(high=1.5)
if x >= 1: x -= 0.5
由于原始分布应该在[0,1.5) 范围内均匀,因此减法应该使[0.5,1.0) 的可能性增加一倍(并且[1.0,1.5) 不可能),同时保持每个部分内的分布均匀([0,0.5) 和@987654333 @):
[0.0,0.5) [0.5,1.0) [1.0,1.5) before
<---------><---------><--------->
[0.0,0.5) [0.5,1.0) [0.5,1.0) after