Есть ли функция в numpy/scipy, которая позволяет вам выбирать многочлен из вектора малых вероятностей журнала, не теряя точности? Пример:
# sample element randomly from these log probabilities
l = [-900, -1680]
наивный метод терпит неудачу из-за недостаточного потока:
import scipy
import numpy as np
# this makes a all zeroes
a = np.exp(l) / scipy.misc.logsumexp(l)
r = np.random.multinomial(1, a)
это одна попытка:
def s(l):
m = np.max(l)
norm = m + np.log(np.sum(np.exp(l - m)))
p = np.exp(l - norm)
return np.where(np.random.multinomial(1, p) == 1)[0][0]
- это лучший/самый быстрый метод и можно избежать np.exp()
на последнем шаге?