Python不重复批量随机抽样 random.sample() 和 numpy.random.choice() 的优缺点

对比

python中random.sample()方法可以随机地从指定列表中提取出N个不同的元素,列表的维数没有限制

文章指出:在实践中发现,当N的值比较大的时候,该方法执行速度很慢。可以用numpy random模块中的choice方法来提升随机提取的效率。

有问题,从该文章看不出来random.sample方法比choice方法慢多少,我自己仿真倒是发现random.sample方法比choice方法快的多,后面会举例说明

numpy.random.choice() 对抽样对象有要求,必须是整数或者一维数组(列表),不能对超过一维的数据进行抽样,这是其缺点。

random.sample() 和 numpy.random.choice() 的优点都是可以指定抽样的个数,一次性从列表中不重复地抽样出指定个数的元素,其中 random.sample()默认就是不重复抽样(不放回的抽样),而numpy.random.choice()默认是可以重复抽样,要想不重复地抽样,需要设置replace参数为False,用法如下:
在这里插入图片描述

补充

前面说random.sample方法比choice方法快的多,下面附图为证。

在这里插入图片描述
在这里插入图片描述

更新(20201105)

有博友留言说,numpy.random.choice()与 random.sample() 两者适合的情况不同,建议增加抽样数量再试试,下面是逐步增加抽样数量后的结果。

列表元素为100000个,抽样个数为9。
在这里插入图片描述
抽样个数为1000。
在这里插入图片描述
抽样个数为10000。

在这里插入图片描述

抽样个数为50000。
在这里插入图片描述
从以上实验来看,numpy.random.choice()抽样方法的时间几乎不会随着抽样数量的变化而变化,而random.sample() 会随着抽样数量的增加而增加。所以当数量较少的时候,random.sample() 用时非常少,而numpy.random.choice()则很长;当抽样数量很大的时候,numpy.random.choice()几乎不变,而random.sample() 用时变长。

简单绘制一下测试结果,如下所示

在这里插入图片描述
从图上可以看到,numpy.random.choice()的用时确实保持不变,而random.sample() 用时会随着抽样比例的增加而线性增长。

总结

从对象类型上看,random.sample方法比numpy.random.choice方法适用范围广。

从速度上看,当抽样数量小的时候,random.sample方法比numpy.random.choice方法快很多;当抽样数量很大的时候,random.sample方法就不如numpy.random.choice方法了。

  • 79
    点赞
  • 148
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值