【第一部分】

Python中的 * 和 ** ,能够让函数支持任意数量的参数,它们在函数定义和调用中,有着不同的目的!

一. 打包参数

* 的作用:在函数定义中,收集所有位置参数到一个新的元组,并将整个元组赋值给变量args>>> def f(*args):      # * 在函数定义中使用

print(args)>>> f()()>>> f(1)(1,)>>> f(1, 2, 3, 4)(1, 2, 3, 4)

** 的作用:在函数定义中,收集关键字参数到一个新的字典,并将整个字典赋值给变量kwargs>>> def f(**kwargs):        # ** 在函数定义中使用

print(kwargs)>>> f(){}>>> f(a=1, b=2){'a': 1, 'b': 2}

二. 解包参数

* 的作用:在函数调用中,* 能够将元组或列表解包成不同的参数>>> def func(a, b, c, d):

print(a, b, c, d)

>>> args = (1, 2, 3, 4)

>>> func(*args)     # * 在函数调用中使用

1 2 3 4

>>> args = [1, 2, 3, 4]

>>> func(*args)

1 2 3 4

** 的作用:在函数调用中,** 会以键/值的形式解包一个字典,使其成为一个独立的关键字参数>>> def func(a, b, c, d):

print(a, b, c, d)

>>> kwargs = {"a": 1, "b": 2, "c": 3, "d": 4}

>>> func(**kwargs)    # ** 在函数调用中使用

1 2 3 4

三. 注意

1. 在函数定义时, * 表示打包;在函数体内部, * 表示的却是解包,事实上,下面例子中print(*args)是print()函数的调用>>> def foo(*args, **kwargs):

print(args)       #未解包参数

print(*args)      #解包参数

>>> v = (1, 2, 4)

>>> d = {'a':1, 'b':12}

>>> foo(v, d)

((1, 2, 4), {'a': 1, 'b': 12})

(1, 2, 4) {'a': 1, 'b': 12}

2. * 和 ** 的打包和解包并不能脱离函数而存在

如下的例子中,表面上看没有调用什么函数,实际上调用了format()函数>>> c = {"name": 'zhang', "age": 2}

>>> **cSyntaxError: invalid syntax

>>> "Name:{name}, Age:{age}".format(**c)'Name:zhang, Age:2'

参考源码中对format函数的定义

这里为什么不用print()函数而用format()呢

可以试试print()函数来解包>>> print(**c)

Traceback (most recent call last):  File "", line 1, in

print(**c)TypeError: 'age' is an invalid keyword argument for this function

因为print()函数只支持 *args,不支持 **kwargs!

更多详细信息具体参见博客:

【第二部分】

np.random.rand(d0,d1,d2……dn)

注:使用方法与np.random.randn()函数相同

作用:

通过本函数可以返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1。

应用:在深度学习的Dropout正则化方法中,可以用于生成dropout随机向量(dl),例如(keep_prob表示保留神经元的比例):dl = np.random.rand(al.shape[0],al.shape[1])!

np.random.randn()函数

np.random.randn(d0,d1,d2……dn)

语法:

1)  当函数括号内没有参数时,则返回一个浮点数;

2)当函数括号内有一个参数时,则返回秩为1的数组,不能表示向量和矩阵;

3)当函数括号内有两个及以上参数时,则返回对应维度的数组,能表示向量或矩阵;

4)np.random.standard_normal()函数与np.random.randn()类似,但是np.random.standard_normal()

的输入参数为元组(tuple).

5)np.random.randn()的输入通常为整数,但是如果为浮点数,则会自动直接截断转换为整数。

作用:

通过本函数可以返回一个或一组服从标准正态分布的随机样本值。

特点:

标准正态分布是以0为均数、以1为标准差的正态分布,记为N(0,1)。对应的正态分布曲线如下所示,即

标准正态分布曲线下面积分布规律是:

在-1.96~+1.96范围内曲线下的面积等于0.9500(即取值在这个范围的概率为95%),在-2.58~+2.58范围内曲线下面积为0.9900(即取值在这个范围的概率为99%).

因此,由 np.random.randn()函数所产生的随机样本基本上取值主要在-1.96~+1.96之间,当然也不排除存在较大值的情形,只是概率较小而已。

numpy.random.uniform()

1. 函数原型:  numpy.random.uniform(low,high,size)

功能:从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.

参数介绍:

low: 采样下界,float类型,默认值为0;

high: 采样上界,float类型,默认值为1;

size: 输出样本数目,为int或元组(tuple)类型,例如,size=(m,n,k), 则输出m*n*k个样本,缺省时输出1个值。

返回值:ndarray类型,其形状和参数size中描述一致。这里顺便说下ndarray类型,表示一个N维数组对象,其有一个shape(表维度大小)和dtype(说明数组数据类型的对象),使用zeros和ones函数可以创建数据全0或全1的数组,原型:

numpy.ones(shape,dtype=None,order='C'),

其中,shape表数组形状(m*n),dtype表类型,order表是以C还是fortran形式存放数据。

2. 类似uniform,还有以下随机数产生函数:

a. randint: 原型:numpy.random.randint(low, high=None, size=None, dtype='l'),产生随机整数;

b. random_integers: 原型: numpy.random.random_integers(low, high=None, size=None),在闭区间上产生随机整数;

c. random_sample: 原型: numpy.random.random_sample(size=None),在[0.0,1.0)上随机采样;

d. random: 原型: numpy.random.random(size=None),和random_sample一样,是random_sample的别名;

e. rand: 原型: numpy.random.rand(d0, d1, ..., dn),产生d0 - d1 - ... - dn形状的在[0,1)上均匀分布的float型数。

f. randn: 原型:numpy.random.randn(d0,d1,...,dn),产生d0 - d1 - ... - dn形状的标准正态分布的float型数。

Example code:

import matplotlib.pyplot as plt

import numpy as np

s = np.random.uniform(0,1,1000)      # 产生1200个[0,1)的数

count, bins, ignored = plt.hist(s, 10, normed=True)

"""

hist原型:

matplotlib.pyplot.hist(x, bins=10, range=None, normed=False, weights=None,

cumulative=False, bottom=None, histtype='bar', align='mid',

orientation='vertical',rwidth=None, log=False, color=None, label=None,

stacked=False, hold=None,data=None,**kwargs)

输入参数很多,具体查看matplotlib.org,本例中用到3个参数,分别表示:s数据源,bins=12表示bin

的个数,即画多少条条状图,normed表示是否归一化,每条条状图y坐标为n/(len(x)`dbin),整个条状图积分值为1

输出:count表示数组,长度为bins,里面保存的是每个条状图的纵坐标值

bins:数组,长度为bins+1,里面保存的是所有条状图的横坐标,即边缘位置

ignored: patches,即附加参数,列表或列表的列表,本例中没有用到。

"""

plt.plot(bins, np.ones_like(bins), linewidth=2, color='r')

plt.show()

点滴分享,福泽你我!Add oil!

转载本文请联系原作者获取授权,同时请注明本文来自张伟科学网博客。

收藏

分享

分享到:

python中rand函数是什么意思_科学网-Python中*和**作用及随机数产生函数 np.random.rand()/numpy.random.unifo...-张伟的博文...相关推荐

  1. python多线程并发数量控制简书_科学网—python多线程编程 - 郗强的博文

    Python是支持多线程的,主要通过thread和threading两个模块来实现,其中thread模块比较底层(或者说是轻量级的),而threading模块对thread做了一些包装,可以更加方便地 ...

  2. python 面板数据分析_科学网—Python中的结构化数据分析利器-Pandas简介 - 郑俊娟的博文...

    此文转载于XXXXXX处... Pandas是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数 ...

  3. python对数运算符号_科学网—Python中算数运算符之注意及np.logspace - 张伟的博文...

    (一)算数运算符 数字2 是一个整数的例子. 长整数 不过是大一些的整数. 3.23和52.3E-4是浮点数的例子.E标记表示10的幂.在这里,52.3E-4表示52.3 * 10-4. (-5+4j ...

  4. python中几种读取文件的方法_科学网—python中几类文件的读写 - 郗强的博文

    所使用python模块为json.csv等. 一.json文件读写 1.JSON简介:其全名为JavaScript Object Notation是一种轻量级的数据交换格式.Json最广泛的应用是作为 ...

  5. matlab中的mkdir函数_科学网—Matlab中计算函数运行时间的三种方法及判断新建文件夹 - 张伟的博文...

    (一)运行时间 1.tic和toc组合 计算daotic和toc之间那专段程序之间的属运行时间,它的经典格式为 : tic 函数 toc 复制函数代码,当代码遇到tic时Matlab自动开始计时,运行 ...

  6. python序列_科学网—Python:序列(字符串、列表、元组)和序列函数 - 刘洋洋的博文...

    Python中的序列,包括字符串(String).列表(List).元组(Tuple). 序列的索引 通过索引(index)访问及获得的序列的一个或多个元素,也叫切片. 正序: 0 到 N-1 倒序: ...

  7. python频次统计图_科学网—Python小例:统计文本中单词出现的频次 - 康建的博文...

    import re zen=''' The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better ...

  8. matlab trapz二重积分函数_科学网—MATLAB中的数值积分方法 - 王福昌的博文

    实际应用中在MATLAB里面都有开发好的命令可以使用,如  quad(), quadl(),quad2d(),triplequad() .需要掌握这些命令的用法. 1. 定积分 trapz(),qua ...

  9. python编程口诀_科学网—Python编程技巧汇总 - 高关胤的博文

    正在学习python编程,把一些小技巧记录下来备查 ======================计算技巧========================== 正常的条件语句如下if a>b:c= ...

最新文章

  1. 在Lotus Domino中使用Java构建应用程序
  2. JavaScript 的同源策略
  3. python信号与槽_Python信号和插槽(1),python,与,一
  4. 在excel工作表中c1单元格_已知Excel工作表中A1单元格和B1单元格的值分别为“电子科技大学”、“信息中心”,要求在C1单元格显示“...
  5. hdu 2680 Choose the best route
  6. 2022年全球及中国医用口服硫酸钡行业规模格局与市场需求展望报告
  7. pdf to word android,Scanned PDF to Word
  8. jsp判断json第一位_java 判断字符串是否为json格式
  9. ROS笔记(6) ROS通讯机制
  10. Objective-c 子类重写方法调用[super method]小实验
  11. nodejs es6 中的单例模式
  12. python从零学——scrapy初体验
  13. 普林斯顿微积分读本-[美]阿德里安·班纳著-修订版;杨爽, 赵晓婷, 高璞译
  14. 树莓派小车————全部代码
  15. 辛普森悖论和朴素贝叶斯
  16. 计算机用户名怎么改好听,电脑版优酷怎么改昵称
  17. 2022年企业法律顾问综合法律知识考试模拟试题卷及答案
  18. 微信小程序的测试方法,抓包,模拟
  19. 城市隧道水位监测与预警系统
  20. 盛大私有化和陈天桥的土皇帝心态

热门文章

  1. WebRTC服务器架构
  2. html中取消列表圆点,css列表怎么去掉点?
  3. matlab符号运算实验目的,MATLAB符号计算实验报告.doc
  4. php 泛型编程,go泛型编程
  5. 2015最新最全 Android 谷歌消息推送GCM 详细使用教程
  6. 你真的了解赛博朋克设计风格?
  7. SpringBoot - Log4j2异步日志
  8. 人工智能客服——迎宾机器人
  9. 2021年安全员-B证考试技巧及安全员-B证操作证考试
  10. 想成为数据科学家,你必须具备哪些技能?