我正尝试通过以下方式使用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除并返回错误。无论如何要创建这种概率分布?
答案 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)