我想在Python中实现随机舍入算法。
该算法很容易描述。
给定一个大小为n的向量x,其中x的每个元素x [i]是0到1之间的实数。生成大小为n的0-1向量y,其中y的每个元素, y [i],如下所示为0或1:
对于i = 1到len(x)do:设置y [i] = 1,概率为x [i],y [i] = 0,概率为1 - x [i]。
我尝试按照以下方式执行此操作,但我想我会想念某些事情,或者可能会有更快/更好的方法:
import numpy
n = 4
x = [0.01, 0.6, 0.1, 0.7]
y = numpy.zeros(n)
for i in range(n):
randomNum = numpy.random.uniform()
if randomNum >= x[i]:
y[i] = 1
else:
y[i] = 0
答案 0 :(得分:3)
这个怎么样:
x = np.array([0.1, 0.3,0.5, 0.7, 0.9])
y = np.random.rand(len(x)) <= x
第一行设置x,第二行随机均匀选择概率,并根据x [i]中的概率/阈值对结果进行二值化。
答案 1 :(得分:0)
FWIW,以下是如何在核心Python中实现该算法:
from random import random
x = [0.01, 0.6, 0.1, 0.7]
y = [int(random() < u) for u in x]
但我怀疑Numpy解决方案会更快,特别是当x
很大时。 :)