utils.py 文件源码

python
阅读 25 收藏 0 点赞 0 评论 0

项目:python-psignifit 作者: wichmann-lab 项目源码 文件源码
def my_betapdf(x,a,b):
    ''' this implements the betapdf with less input checks '''

    if type(x) is int or float:
        x = array(x)

    # Initialize y to zero.
    y = zeros(shape(x))

    if len(ravel(a)) == 1:
        a = tile(a,shape(x))

    if len(ravel(b)) == 1:
        b = tile(b,shape(x))

    # Special cases
    y[logical_and(a==1, x==0)] = b[logical_and(a==1 , x==0)]
    y[logical_and(b==1 , x==1)] = a[logical_and(b==1 , x==1)]
    y[logical_and(a<1 , x==0)] = inf
    y[logical_and(b<1 , x==1)] = inf

    # Return NaN for out of range parameters.
    y[a<=0] = nan
    y[b<=0] = nan
    y[logical_or(logical_or(isnan(a), isnan(b)), isnan(x))] = nan

    # Normal values
    k = logical_and(logical_and(a>0, b>0),logical_and(x>0 , x<1))
    a = a[k]
    b = b[k]
    x = x[k]

    # Compute logs
    smallx = x<0.1

    loga = (a-1)*log(x)

    logb = zeros(shape(x))
    logb[smallx] = (b[smallx]-1) * log1p(-x[smallx])
    logb[~smallx] = (b[~smallx]-1) * log(1-x[~smallx])

    y[k] = exp(loga+logb - betaln(a,b))

    return y
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号