如何更改NumPy后勤功能的基础?

时间:2018-08-03 07:50:48

标签: python python-3.x numpy statistics

对于Elo评分系统模拟,我需要从基本sqrt(10)中的逻辑分布中抽取样本。

在NumPy文档中,我发现: https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.random.logistic.html 这使用基数“ e”中的概率密度:

exp((loc-x)/scale)/(scale*(1+exp((loc-x)/scale))**2)

我需要在基本sqrt(10)中使用概率密度。 你知道我该怎么做吗?

1 个答案:

答案 0 :(得分:3)

经过一番检查后,我相当确定这在数学上是正确的:

def logistic_sample(n, loc = 0, scale = 1, base = np.exp(1)):
    p = np.random.rand(n)
    return loc + scale * np.log(p / (1 - p)) / np.log(base)

如果您确实需要深入研究该分布,则还可以创建一个新的scipy.stats.rv_continuous类:

class logistic_base_gen(scipy.stats.rv_continuous):
    def _pdf(self, x, loc, scale, base):
        return base ** ((loc - x) / scale) / (s * (1 + base ** ((loc - x) / scale)) ** 2)

logistic_base = logistic_base_gen(0)
logistic_base.rvs(loc, scale, np.sqrt(10), size = n)