在Python3.6中使用Numpy创建概率分布

时间:2018-11-26 10:54:55

标签: python numpy probability

我正尝试通过以下方式使用Numpy创建概率分布:

x = 3
pat = [0.20, 0.30, 1.30]
z = numpy.random.choice(x, p=numpy.ndarray.tolist(numpy.array(pat)/sum(pat)))

这很好用。问题是我的“人口”正在演变,并且从0开始,这意味着可能会发生这种情况:

x = 3
pat = [0, 0, 0]
z = numpy.random.choice(x, p=numpy.ndarray.tolist(numpy.array(pat)/sum(pat)))

此时,python被0除并返回错误。无论如何要创建这种概率分布?

2 个答案:

答案 0 :(得分:1)

一行显示如下:

z = numpy.random.choice(x, p=numpy.ndarray.tolist(numpy.array(pat)/sum(pat))) if any(pat) else numpy.random.choice(x)

答案 1 :(得分:0)

对于边缘情况,您可以使用简单的if/else

if sum(pat) != 0:
    z = numpy.random.choice(x, p=numpy.ndarray.tolist(numpy.array(pat)/sum(pat)))
else:
    z = numpy.random.choice(x)