В конечном итоге я хочу округлить ожидаемое значение распределения дискретной случайной величины до действительного числа в распределении. Например, если я рисую равномерно из чисел [1, 5, 6], ожидаемое значение равно 4, но я хочу вернуть ему самое близкое число (ie, 5).
from scipy.stats import *
xk = (1, 5, 6)
pk = np.ones(len(xk))/len(xk)
custom = rv_discrete(name='custom', values=(xk, pk))
print(custom.expect())
# 4.0
def round_discrete(discrete_rv_dist, val):
# do something here
return answer
print(round_discrete(custom, custom.expect()))
# 5.0
Я не знаю, априори, какое распределение будет использоваться (ie может не быть целым числом, может быть неограниченным распределением), поэтому я действительно изо всех сил пытаюсь придумать алгоритм, который достаточно универсален c. Редактировать: я только что узнал, что rv_discrete не работает с нецелыми значениями xk.
Что касается почему Я хочу сделать это, я собираю симуляцию Монте-Карло, и хотите «номинальное» значение для каждого распределения. Я думаю, что EV является физически более подходящим, чем режим или медиана. У меня могут быть значения в последующем моделировании, которые должны быть одним из нескольких дискретных вариантов, поэтому передача значения, не входящего в этот набор, недопустима.
Если уже есть хороший способ сделать это в Python это было бы здорово, иначе я могу интерпретировать математику в код.