簡體   English   中英

如何在Scipy中實現日志統一分發?

[英]How to implement a log uniform distribution in Scipy?

我不明白如何在Scipy中實現對數均勻概率分布。 根據這篇文章的評論,可以通過僅定義_pdf 另外,我從這個來源知道pdf的實際推導。

不過,我想不通的地方放ab參數,以及如何設置a這樣a>0 另外,請注意我希望ab是范圍的實際最小值和最大值。 還請注意,最后,我真的只是希望能夠使用.rvs()方法,因此任何具有均勻分布的技巧都是可以接受的。

這是我的無用(非工作)代碼:

from scipy.stats import rv_continuous
import numpy as np

class log_uniform_gen(rv_continuous):
    "Log-uniform distribution"
    def _pdf(self, x):
        if np.exp(self.a) <= x <= np.exp(self.b):
            temp = x / (self.b - self.a)
        else:
            temp = 0.

        return temp
log_uniform = log_uniform_gen(a=0.1, b=1.0, name='log-uniform')

以下是使用.rvs()方法獲取對數均勻分布實例的技巧:

import numpy as np
import scipy as sp

class log_uniform():        
    def __init__(self, a=-1, b=0, base=10):
        self.loc = a
        self.scale = b - a
        self.base = base

    def rvs(self, size=None, random_state=None):
        uniform = sp.stats.uniform(loc=self.loc, scale=self.scale)
        if size is None:
            return np.power(self.base, uniform.rvs(random_state=random_state))
        else:
            return np.power(self.base, uniform.rvs(size=size, random_state=random_state))

它可以用log_uniform(a=2, b=10).rvs(size=10) ,其中a是范圍開始的指數, b是范圍結束的指數。 可以使用base參數修改base

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM