首页 > 其他 > 详细

numpy random choice的替代方案

时间:2020-06-04 10:49:57      阅读:85      评论:0      收藏:0      [点我收藏+]

无法避免的使用多次循环完成指定概率分布抽样。

加速的方法是通过numba 的jit来进行。

但是numba不支持choice的指定概率p的用法。

所以需要寻找choice用法的替代方案。

 

网上查出:https://www.pythonheidong.com/blog/article/147920/

def weighted_random(w, n):
    cumsum = np.cumsum(w)
    rdm_unif = np.random.rand(n)
    return np.searchsorted(cumsum, rdm_unif)



可以尝试。
经过尝试成功:
@jit(nopython=True)
def weighted_random(w, n):
    cumsum = np.cumsum(w)
    rdm_unif = np.random.rand(n)
    return np.searchsorted(cumsum, rdm_unif)
@jit(nopython=True)
def pirandom2(rate,det,pha):
    pilist=[]
    for i,phai in enumerate(pha):
        pitemp = weighted_random(rate[det[i]][phai],1)
        pilist.append(pitemp[0])
        #print i,det[i],phai,pitemp
    return pilist
#####下方代码无法执行#####因为numba不支持choice的p用法#######
@jit(nopython=True)
def pirandom(rate,det,pha):
    pilist=[]
    for i,phai in enumerate(pha):
        pilist.append(np.random.choice(256, 1, p=rate[det[i]][phai]))
        print i,det[i],phai,pilist[i]
    return pilist

 

 

numpy random choice的替代方案

原文:https://www.cnblogs.com/heshangaichirou/p/13041537.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!