zoukankan      html  css  js  c++  java
  • numpy random choice的替代方案

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

    加速的方法是通过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
     
  • 相关阅读:
    css display和vertical-align 属性
    Python:time模块/random模块/os模块/sys模块
    css display和vertical-align 属性
    初始面向对象
    模块小记
    迭代器与生成器
    默认参数的陷阱自我心得
    初始函数
    文件操作
    python基础知识补充
  • 原文地址:https://www.cnblogs.com/heshangaichirou/p/13041537.html
Copyright © 2011-2022 走看看