设为首页 收藏本站
查看: 1066|回复: 0

[经验分享] Python标准库12 数学与随机数 (math包,random包)

[复制链接]

尚未签到

发表于 2015-4-23 05:40:43 | 显示全部楼层 |阅读模式
  作者:Vamei 出处:http://www.iyunv.com/vamei 欢迎转载,也请保留这段声明。谢谢!
  
  我们已经在Python运算中看到Python最基本的数学运算功能。此外,math包补充了更多的函数。当然,如果想要更加高级的数学功能,可以考虑选择标准库之外的numpy和scipy项目,它们不但支持数组和矩阵运算,还有丰富的数学和物理方程可供使用。

  此外,random包可以用来生成随机数。随机数不仅可以用于数学用途,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。

  

math包

  math包主要处理数学相关的运算。math包定义了两个常数:
  math.e   # 自然常数e
  math.pi  # 圆周率pi
  
  此外,math包还有各种运算函数 (下面函数的功能可以参考数学手册):

  math.ceil(x)       # 对x向上取整,比如x=1.2,返回2

  math.floor(x)      # 对x向下取整,比如x=1.2,返回1

  math.pow(x,y)      # 指数运算,得到x的y次方

  math.log(x)        # 对数,默认基底为e。可以使用base参数,来改变对数的基地。比如math.log(100,base=10)

  math.sqrt(x)       # 平方根

  
  三角函数: math.sin(x), math.cos(x), math.tan(x), math.asin(x), math.acos(x), math.atan(x)

  这些函数都接收一个弧度(radian)为单位的x作为参数。

  
  角度和弧度互换: math.degrees(x), math.radians(x)

  
  双曲函数: math.sinh(x), math.cosh(x), math.tanh(x), math.asinh(x), math.acosh(x), math.atanh(x)

  
  特殊函数: math.erf(x), math.gamma(x)
  

random包

  如果你已经了解伪随机数(psudo-random number)的原理,那么你可以使用如下:

  random.seed(x)

  来改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。

  
  1) 随机挑选和排序

  random.choice(seq)   # 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。

  random.sample(seq,k) # 从序列中随机挑选k个元素
  random.shuffle(seq)  # 将序列的所有元素随机排序

  
  2)随机生成实数
  下面生成的实数符合均匀分布(uniform distribution),意味着某个范围内的每个数字出现的概率相等:

  random.random()          # 随机生成下一个实数,它在[0,1)范围内。

  random.uniform(a,b)      # 随机生成下一个实数,它在[a,b]范围内。

  
  下面生成的实数符合其它的分布 (你可以参考一些统计方面的书籍来了解这些分布):

  random.gauss(mu,sigma)    # 随机生成符合高斯分布的随机数,mu,sigma为高斯分布的两个参数。

  random.expovariate(lambd) # 随机生成符合指数分布的随机数,lambd为指数分布的参数。
  此外还有对数分布,正态分布,Pareto分布,Weibull分布,可参考下面链接:

  http://docs.python.org/library/random.html
  
  假设我们有一群人参加舞蹈比赛,为了公平起见,我们要随机排列他们的出场顺序。我们下面利用random包实现:



import random
all_people = ['Tom', 'Vivian', 'Paul', 'Liya', 'Manu', 'Daniel', 'Shawn']
random.shuffle(all_people)
for i,name in enumerate(all_people):
print(i,':'+name)
  
  练习
  设计下面两种彩票号码生成器:
  1. 从1到22中随机抽取5个整数 (这5个数字不重复)
  2. 随机产生一个8位数字,每位数字都可以是1到6中的任意一个整数。

  

总结
  math.floor(), math.sqrt(), math.sin(), math.degrees()
  random.random(), random.choice(), random.shuffle()

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59684-1-1.html 上篇帖子: VS2010安装Python 下篇帖子: Python基础教程总结(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表