这是获得随机舍入解决方案的正确方法吗?

时间:2016-03-14 00:38:17

标签: python numpy random

我想在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

2 个答案:

答案 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很大时。 :)