我最终想要做的是将离散随机变量分布的期望值四舍五入为分布中的有效数字。例如,如果我从数字[1、5、6]均匀绘制,则期望值为4,但我想返回与其最接近的数字(即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
我不知道先验会使用哪种分布(即可能不是整数,可能是无界分布),所以我真的很难考虑一种足够通用的算法。
找出来,并对其进行了测试。如果将值X插入cdf,则可以将该概率P = cdf(X)插入ppf(逆cdf)。 ppf(P +-epsilon)处的值将为我提供集合中最接近X的值。然后,我可以做一个简单的区别来找出哪个更接近。
import numpy as np
eps = np.finfo(float).eps
ev = custom.expect()
p = custom.cdf(ev)
ev_candidates = np.array([custom.ppf(p - eps), custom.ppf(p), custom.ppf(p + eps)])
ev_candidates_distance = abs(ev_candidates - ev)
ev_closest = ev_candidates[np.argmin(ev_candidates_distance)]
print(ev_closest)
# 5.0
数学库中的函数ceil对您有帮助吗?例如:
from math import ceil
print(float(ceil(3.333333333333333)))