Создание распределения вероятностей с использованием Numpy в Python3.6 - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь создать распределение вероятностей, используя 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 голосов
/ 26 ноября 2018

В одной строке это будет выглядеть так:

z = numpy.random.choice(x, p=numpy.ndarray.tolist(numpy.array(pat)/sum(pat))) if any(pat) else numpy.random.choice(x)
0 голосов
/ 26 ноября 2018

Вы можете использовать простой 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)
...