python游戏编程快速上手pdf下载,Python快速编程入门(第2版)
这是一个非常快速的完全矢量化版本:
极好的矢量化(概率矩阵,项目):
s=prob_matrix.cumsum(轴=0)
r=NP。随机的。兰德(prob _ matrix。形状[1])
返回项目[k]
在[115]中:%timeit original(prob_matrix,items)
一次循环,每次循环最好为3: 270毫秒
在[116]: %timeit改进(概率矩阵,项目)
10次循环,最好为3次:每次循环24.9毫秒
在[117]: %timeit向量化(概率矩阵,项目)
1000次循环,每次循环最好为3: 1毫秒
定义函数的完整脚本是:
将数组作为铭牌导入
极好的改进(概率矩阵,项目):
#在此转置以获得更好的数据局部性
cdf=np.cumsum(prob_matrix .t,轴=1)
#随机数很贵,所以我们会一次全部得到
#我们无法避免的一个循环,尽可能简单
idx=np.zeros(n,dtype=int)
对于I,r in enumerate(ridx):
idx[i]=np.searchsorted(cdf[i],r)
#一次索引比循环索引更快
返回项目[idx]
定义原始(prob_matrix,项目):
choices=np.zeros((n,))
#这很慢,因为计算机编程语言中有循环
对于范围内的我(n):
选择[i]=NP。随机的。choice(items,p=prob_matrix[:I])
返回选择
极好的矢量化(prob_matrix,项目):
s=prob_matrix.cumsum(轴=0)
r=NP。随机的。兰德(prob _ matrix。形状[1])
返回项目[k]
m=10
n=10000 #或某个非常大的数字
items=np.arange(m)
prob_weights=np.random.rand(m,n)
概率矩阵=概率权重/概率权重。sum(axis=0,keepdims=True)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。