Python 内置模块之 random

常用API 

import random# 随机小数
print(random.random())      # 大于0且小于1之间的小数。0<= n<1.0
print(random.uniform(1,3))  # 大于1小于3的小数# 随机整数
print(random.randint(1,5))      # 大于等于1且小于等于5之间的整数#从指定范围内,按指定基数递增的集合中 获取一个随机数。
random.randrange([start], stop[, step])
random.randrange(10, 30, 2)   # 结果相当于从[10, 12, ... 26, 28]序列中获取一个随机数。
random.randrange(10, 30, 2)   # 在结果上与 random.choice(range(10, 30, 2) 等效。# 随机选择一个返回
print(random.choice([1,'23',[4,5]]))     # 1或者23或者[4,5]
# 随机选择多个返回,返回的个数为函数的第二个参数
print(random.sample([1,'23',[4,5]],2))   # 列表元素任意2个组合[[4, 5], '23']# 打乱列表顺序
item=[1,3,5,7,9]
random.shuffle(item) # 打乱次序
print(item)         # [5, 1, 3, 7, 9]
random.shuffle(item)
print(item)         # [5, 9, 7, 1, 3]

加权随机算法实现

方法一

最简单的方法可以这样:把序列按权重值扩展成:lists=[A,A,A,A,A,B,B,C,C,D],然后random.choice(lists)随机选一个就行。虽然这样选取的时间复杂度是O(1),但是数据量一大,空间消耗就太大了。

# coding:utf-8
import randomdef weight_choice(list, weight):""":param list: 待选取序列:param weight: list对应的权重序列:return:选取的值"""new_list = []for i, val in enumerate(list):new_list.extend(val * weight[i])return random.choice(new_list)if __name__ == "__main__":print(weight_choice(['A', 'B', 'C', 'D'], [5, 2, 2, 1]))

 

 

方法二

比较常用的方法是这样:计算权重总和sum,然后在1到sum之间随机选择一个数R,之后遍历整个集合,统计遍历的项的权重之和,如果大于等于R,就停止遍历,选择遇到的项。

还是以上面的集合为例,sum等于10,如果随机到1-5,则会在遍历第一个数字的时候就退出遍历。符合所选取的概率。

选取的时候要遍历集合,它的时间复杂度是O(n)。

 

# coding:utf-8
import randomlist = ['A', 'B', 'C', 'D']def weight_choice(weight):""":param weight: list对应的权重序列:return:选取的值在原列表里的索引"""t = random.randint(0, sum(weight) - 1)for i, val in enumerate(weight):t -= valif t < 0:return iif __name__ == "__main__":print(list[weight_choice([5, 2, 2, 1])])

方法三

可以先对原始序列按照权重排序。这样遍历的时候,概率高的项可以很快遇到,减少遍历的项。(因为rnd递减的速度最快(先减去最大的数))比较{A:5,B:2,C:2,D:1}和{B:2,C:2,A:5,D:1}前者遍历步数的期望是5/10*1+2/10*2+2/10*3+1/10*4=19/10而后者是2/10*1+2/10*2+5/10*3+1/10*4=25/10。这样提高了平均选取速度,但是原序列排序也需要时间。先搞一个权重值的前缀和序列,然后在生成一个随机数t后,可以用二分法来从这个前缀和序列里找,那么选取的时间复杂度就是O(logn)了。

# coding:utf-8
import random
import bisectlist = ['A', 'B', 'C', 'D']def weight_choice(weight):""":param weight: list对应的权重序列:return:选取的值在原列表里的索引"""weight_sum = []sum = 0for a in weight:sum += aweight_sum.append(sum)t = random.randint(0, sum - 1)return bisect.bisect_right(weight_sum, t)if __name__ == "__main__":print(list[weight_choice([5, 2, 2, 1])])

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信jssdk遇到的一些问题汇总

1.用户手动去触发的接口可以直接调用比如wx.startRecord(); 但是写在页面加载完成里就无效&#xff0c;需要写在 wx.ready(function(){wx.startRecord(); }); 才会有效。 2.h5 的audio标签只支持ogg,mp3,wav格式的音频&#xff0c;微信jssdk录制的是amr格式的语音文件&#xf…

mongodb简单的增删改查

数据库操作&#xff1a; show dbs;#查看数据库use test;#如果没有就创建一个db;#查看当前数据库db.dropDatabase();#删除数据库 数据操作&#xff1a;show collections&#xff1b;#查看集合创建集合、插入&#xff1a;create collection;#创建集合db.student.insert({"na…

ffmpeg-0.8 开源编码解码库从linux下移植到windows vs2005

最新 ffmpeg-0.8 开源编码解码库&#xff0c;从linux下移植到windows vs2005&#xff0c;全部开源。需要 Intel C Compile 和 开源的SDL库支持&#xff0c;由于 Intel C Compile支持C99语法&#xff0c;所以源代码改动很小很小。主要的修改1&#xff1a;添加了linux中有而windo…

python3.5.2使用教程_Python3.5.2-初级教程.docx

Python3.5.2-初级教程Python 初级教程Release:3.5.2引言Python 是一门简单易学且功能强大的编程语言。它拥有高效的高级数据结构&#xff0c;并且能够用简单而又高效的方式进行面向对象编程。Python 优雅的语法和动态类型&#xff0c;再结合它的解释性&#xff0c;使其在大多数…

Flask 离线脚本

1. 在 __init__.py中创建db对象from flask_sqlalchemy import SQLAlchemy# 包含了SQLAlchemy相关的所有操作db SQLAlchemy()2. 在 __init__.py中create_app函数中让将app传入到db中def create_app():app Flask(__name__)app.config.from_object(settings.DevelopmentConfig)f…

day13 迭代器和生成器

一、上节回顾和作业讲解&#xff1a; 1、如果这个网页没有被爬取过就真的去访问这个网页&#xff0c;否则就返回之前访问的时候缓存文件中的内容 &#xff08;重要的例子&#xff09; from urllib.request import urlopen def wrapper(func):def inner(*args, **kwargs):with o…

Centos7.0 搭建Zabbix环境

实验环境&#xff1a;Centos7.0IP:192.168.47.140关闭iptables及setenforce导入源 rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm安装zabbix包安装完成安装mysql源wget http://repo.mysql.com/mysql-community-release-el7-5…

用线性插值算法实现图像缩放

用线性插值算法实现图像缩放 猛禽[Mental Studio](个人专栏)(BLOG) http://mental.mentsu.com 在Windows中做过图像方面程序的人应该都知道Windows的GDI有一个API函数&#xff1a;StretchBlt&#xff0c;对应在VCL中是TCanvas类的StretchDraw方法。它可以很简单地实现图像的缩放…

蒙特卡洛分析 pmp_PMP基础名词介绍 | 59. 实施定量风险分析

点击上方蓝字关注我们你好&#xff0c;这是“兔子研习社”为管理新手推出的“PMP基础名词介绍”系列内容。如果你正打算转到管理岗位&#xff0c;或者想要学习国际通行的项目管理知识&#xff0c;那恭喜你&#xff0c;这里满满的干货会让你不虚此行。实施定量风险分析是就已识别…

深度学习案例之基于 CNN 的 MNIST 手写数字识别

一、模型结构 本文只涉及利用Tensorflow实现CNN的手写数字识别,CNN的内容请参考:卷积神经网络(CNN) MNIST数据集的格式与数据预处理代码input_data.py的讲解请参考 :Tutorial (2) 二、实验代码 # -*- coding:utf-8 -*- """Time : Author: Feng LepengFile …

怎样获取linux命令帮助?

获得命令使用帮助&#xff1a;内部命令&#xff1a;help COMMAND外部命令&#xff1a;COMMAND --help &#xff08;大多数命令有help选项&#xff09;命令手册&#xff1a;manualman [章节号] COMMAND其中man数据库是分章节的&#xff0c;相同的COMMAND出现在不同的章节表示…

编译安装 zbar 时两次 make 带来的惊喜

为了装 php 的条形码扩展模块 php-zbarcode&#xff0c;先装了一天的 ImageMagick 和 zbar。也许和我装的 Ubuntu 17.10 的有版本兼容问题吧&#xff0c;总之什么毛病都有&#xff0c;apt 不行&#xff0c;PPA 源也不行&#xff0c;编译安装还有几处源代码出错&#xff0c;装不…

python数组的乘法_在Python中乘法非常大的2D数组

我必须在Python中将非常大的2D数组乘以大约100次.每个矩阵由3200032000元素组成.我正在使用np.dot(X,Y),但是每次乘法都需要很长时间…在我的代码实例下面&#xff1a;import numpy as npX Nonefor i in range(100)multiplying Trueif X None:X generate_large_2darray()mu…

0阶指数哥伦布编码

指数哥伦布编码 规定语法元素的编解码模式的描述符如下&#xff1a; 比特串&#xff1a; b(8):任意形式的8比特字节&#xff08;就是为了说明语法元素是为8个比特&#xff0c;没有语法上的含义&#xff09; f(n):n位固定模式比特串&#xff08;其值固定&#xff0c;如forbidde…

TensorFolw 报错

1、报错1&#xff1a;ValueError: Only call softmax_cross_entropy_with_logits with named arguments (labels..., logits..., ...) 提示出错如下&#xff1a; Traceback (most recent call last):File "/MNIST/softmax.py", line 12, in <module>cross_en…

CentOS7种搭建FTP服务器

安装vsftpd 首先要查看你是否安装vsftp [rootlocalhost /]# rpm -q vsftpd vsftpd-3.0.2-10.el7.x86_64 #显示也就安装成功了&#xff01; 如果没有则安装vsftpd [rootlocalhost/]# yum install -y vsftpd 完成后再检查一遍 [rootlocalhost /]# whereis vsftpd vsf…

js循环

顺序——要加分号结束 分支&#xff1a;让程序根据条件不同执行不同的代码 if else语句用来做分支的 if&#xff08;条件&#xff09;{代码} if&#xff08;条件&#xff09;{代码}else{代码} else if&#xff08;条件&#xff09;{代码} if是嵌套。 switch...case&#xff1…

x264函数调用关系图

1 encoder 2 slice write 3 analyse FFMPEG中MPEG-2编解码函数调用关系图 1 Encoder &#xff08;函数调用从左到右&#xff0c;下同&#xff1b;图片显示不全时&#xff0c;请下载显示&#xff09; 2 P帧运动估计流程图 3 B帧运动估计流程图 4 decoder ffmpeg的mpeg2编码I帧代…

Tensorflow 加载预训练模型和保存模型

使用tensorflow过程中&#xff0c;训练结束后我们需要用到模型文件。有时候&#xff0c;我们可能也需要用到别人训练好的模型&#xff0c;并在这个基础上再次训练。这时候我们需要掌握如何操作这些模型数据。看完本文&#xff0c;相信你一定会有收获&#xff01; 一、Tensorfl…

在 ActiveReports 中嵌入 Spread 控件

Spread 是一款很出色的表格控件&#xff0c;Spread 可以使开发人员把具有兼容 Microsoft Excel 的电子表格添加到程序中。ActiveReports 提供了一个非常灵活的、简单的报表环境。下面将展示怎样在 ActiveReports 中使用 Spread for WinForm。和其他三方控件一样&#xff0c;Spr…