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

Creating a probability distribution using Numpy in Python3.6

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

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

这很好用。问题是我的 "population" 正在进化,从 0 开始,意味着这可能会发生:

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

此时,python 除以 0,returns 出现错误。无论如何要创建这种概率分布?

您可以使用简单的 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)

在一行中它看起来像这样:

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