NumPy的随机函数子库——numpy.random
NumPy的随机函数子库numpy.random
导入模块:import numpy as np
1.numpy.random.rand(d0,d1,...,dn)
生成一个
shape
为(d0,d1,..,dn)
的n+1
维数组,元素类型为浮点数,元素大小范围是[0,1)
,均匀分布,随机产生。
例:print(np.random.rand(2, 4, 3)) # 生成形状(2, 3, 4)的数组,元素范围[0,1)
输出:
[[[0.08107628 0.04956067 0.83403251]
[0.73348641 0.22740465 0.44141622]
[0.70812428 0.50366491 0.16319069]
[0.23489969 0.22264408 0.41775059]]
[[0.27914631 0.21867713 0.58931227]
[0.6127974 0.70726846 0.14208385]
[0.15550672 0.51313179 0.42235755]
[0.74947943 0.31251786 0.93366842]]]
2.numpy.random.randn(d0,d1,...,dn)
生成一个
shape
为(d0,d1,..,dn)
的n+1
维数组,每个元素根据标准正态分布选取(以标准正态分布概率[均值 0 ,方差 1]选取)
例:
print(np.random.randn((2, 4, 3))) # 生成形状(2, 3, 4)的数组,元素按标准正态分布概率选取
输出:
[[[-7.40176849e-01 9.40982449e-01 -1.85626634e+00]
[-2.14781970e+00 -1.20718936e+00 6.60928168e-02]
[-8.56319634e-01 7.71651987e-02 6.35307831e-01]
[ 2.91513583e-01 -1.39772605e-01 -1.48862019e+00]]
[[ 7.13526535e-01 -3.86690423e-01 -2.77161802e-01]
[-1.13884190e+00 1.55954273e+00 4.71092318e-01]
[ 5.78259451e-01 -4.49355023e-01 -1.20299992e+00]
[ 9.21175204e-01 1.64123963e-03 -4.31770365e-01]]]
3.numpy.random.randint(low[,high,shape])
numpy.random.random_integers(low, high=None, size=None)
根据
shape
创建随机整数或整数数组,范围是[low, high)
根据
size
生成随机整数或整数数组,范围是[low,high]
(闭区间),若没有输入high
值,则取值区间为[1,low]
,故有要么指定low
和high
,要么low
值不得小于1,该函数已经不推荐使用
例:
print(np.random.randint(1, 20, (2, 4, 3))) # 生成形状(2, 3, 4)的数组,元素从[1,20)中随机选取
输出:
[[[11 10 10]
[18 16 3]
[ 3 14 19]
[ 8 15 13]]
[[18 7 3]
[17 19 8]
[12 8 1]
[10 10 18]]]
4.numpy.random.random(size)
numpy.random.sample(size)
/numpy.random.random_sample(size)
这里的
size
其实是形状,生成一个size
的[0,1)
的数组,元素类型是浮点数效果同
numpy.random.rand
几乎相同,但注意这里size
要有自己的括号。后两个完全相同,随机抽样,默认在
[0,1]
(闭区间),元素不重复。
例:
print(np.random.random((2, 4, 3)))
print(np.random.sample())
print(np.random.random_sample((2, 3)))
输出:
[[[0.21020521 0.37122852 0.03383711]
[0.23386054 0.7986251 0.8369027 ]
[0.09217639 0.612044 0.65145477]
[0.30986865 0.26842161 0.29962382]]
[[0.99494902 0.4181025 0.87538905]
[0.68241093 0.55573031 0.78071812]
[0.70965995 0.74623345 0.7754667 ]
[0.4329036 0.61242956 0.39635618]]]
0.16432347012964632
[[0.85182577 0.04401757 0.46590524]
[0.00279312 0.42467165 0.89278565]]
5.numpy.random.uniform(low=0.0, high=1.0, size=None)
生成
size
个符合均匀分布的浮点数,取值范围为:[low,high)
,默认取值范围为[0,1.0)
,不指定size
则生成一个浮点数
例:
print(np.random.uniform())
print(np.random.uniform(5, 10, (2, 3)))
输出:
0.9781629383822831
[[8.32110262 8.14592369 7.24874029]
[6.46591872 7.87467467 5.90418415]]
6.numpy.random.RandomState()
/numpy.random.seed()
.RandomState()
是一个伪随机数生成器,返回一个随机数对象,需要给其赋值到一个对象中,再基于该对象进行随机数生成,如a.rand(4)
.seed()
改变当前随机数种子值,功能同Python
中的random.seed()
功能几乎一样。二者声明一次生效一次,若想生成相同随机数,必须每次生成前都声明一次。
例:
rsd = np.random.RandomState(10)
print(rsd.rand(2, 3)) # 1
print(rsd.rand(2, 3)) # 2
rsd = np.random.RandomState(10)
print(rsd.rand(2, 3)) # 3
输出:
[[0.77132064 0.02075195 0.63364823]
[0.74880388 0.49850701 0.22479665]]
[[0.19806286 0.76053071 0.16911084]
[0.08833981 0.68535982 0.95339335]]
[[0.77132064 0.02075195 0.63364823]
[0.74880388 0.49850701 0.22479665]]
可见,1,3生成的数组完全相同,2不同。
同理,对于.seed
同样如此:
np.random.seed(10)
print(np.random.randint(1, 5, (2, 3))) # 1
print(np.random.randint(1, 5, (2, 3))) # 2
np.random.seed(10)
print(np.random.randint(1, 5, (2, 3))) # 3
输出:
[[2 2 1]
[4 1 2]]
[[4 1 2]
[2 1 2]]
[[2 2 1]
[4 1 2]]
7.numpy.random.bytes(length)
生成长度为
length
的随机字节,无默认值
例:
st = np.random.bytes(9)
print(st)
print(type(st))
print(len(st))
输出:
b'\x0e\x11\x18\xbd\xb8\xder\x87E'
<class 'bytes'>
9
7.numpy.random.choice(a, size=None, replace=True, p=None)
从
a
(数组)(a
必须是一维数组)中选取size
(维度)大小的随机数,replace=True
表示可重复抽取,p
是a
中每个数出现的概率,默认为等概率;若a
是整数,则a
代表的数组是arange(a)
例:
a = np.random.randint(100, 200, (12,))
print("数组a:\n", a)
print("等概率可重复抽取:\n", np.random.choice(a, (2, 5)))
print("等概率不重复抽取:\n", np.random.choice(a, (2, 5), replace=False))
print("数字越大概率越大可重复抽取:\n", np.random.choice(a, (2, 5), p=a/np.sum(a)))
print("不指定数组a:\n", np.random.choice(20, (2, 5)))
输出:
数组a:
[162 115 175 125 187 117 173 160 165 128 170 116]
等概率可重复抽取:
[[170 175 160 125 116]
[115 115 173 173 160]]
等概率不重复抽取:
[[175 116 125 162 170]
[173 165 128 160 115]]
数字越大概率越大可重复抽取:
[[162 117 116 160 128]
[187 162 125 187 116]]
不指定数组a:
[[ 1 12 3 3 2]
[ 2 5 11 14 13]]
8.排列
numpy.random.shuffle(a)
根据数组
a
的第0
轴(最外维度)进行随机排列,排列之后,数组a
会被改变,该表达式不返回任何值
numpy.random.permutation(a)
根据数组
a
的第0
轴产生一个新的乱序数组,不改变数组a
,返回随机排列的新数组
例:
a = np.random.randint(100, 200, (3, 4))
print(a)
np.random.shuffle(a) # 无返回值
print("第0轴随机排列后数组a:\n", a) # np.random.shuffle(a)
b = np.random.randint(100, 200, (3, 4))
print("数组b是:\n", b)
c = np.random.permutation(b)
print("数组c是:\n", c)
print("此时数组b是:\n", b)
输出:
[[173 129 130 194]
[182 189 133 127]
[176 177 195 102]]
第0轴随机排列后数组a:
[[182 189 133 127]
[176 177 195 102]
[173 129 130 194]]
数组b是:
[[154 106 121 194]
[196 185 152 164]
[100 105 140 105]]
数组c是:
[[196 185 152 164]
[154 106 121 194]
[100 105 140 105]]
此时数组b是:
[[154 106 121 194]
[196 185 152 164]
[100 105 140 105]]
9.部分随机分布函数
正态分布: numpy.random.normal(loc=0.0,scale=1.0,size=None)
一般的形式,返回均值为
loc
,标准差为scale
的正态分布,shape
由size
参数决定。
numpy.random.standard_normal(size=None)
跟
randn
一样,也是返回标准正态分布的数组,不同的是它的shape
由size
参数指定,对于多维数组,size
必须是元组形式;
例:
print(np.random.standard_normal(size=(2, 3))) # 标准正态分布
print(np.random.normal(loc=2, scale=5, size=(2, 3))) # 均值为2,方差为5的正态分布
输出:
[[-0.60131876 -0.10213314 -1.8444068 ]
[ 0.05931106 -0.43175618 1.83188827]]
[[ 5.15009084 4.90896806 5.54834259]
[-0.19980892 10.94942554 -3.76847748]]
泊松分布: numpy.random.poisson(lam=1.0, size=None)
产生具有泊松分布的数组,
lam
随机事件发生率,size
形状
例:
print(np.random.poisson(lam=2, size=(2, 3)))
输出:
[[7 1 5]
[2 1 5]]
参考资料
NumPy的随机函数子库——numpy.random的更多相关文章
- Python——Numpy的random子库
NumPy的random子库 np.random.* np.random.rand() np.random.randn() np.random.randint() import numpy as np ...
- [python]-数据科学库Numpy学习
一.Numpy简介: Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针.这样为了保存一个简单的[1,2,3],需要有3 ...
- Python科学计算库-Numpy
NumPy 是 Python 语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,也是学习 python 必学的一个库. 1. 读取文件 numpy.gen ...
- Python数据分析工具库-Numpy 数组支持库(一)
1 Numpy数组 在Python中有类似数组功能的数据结构,比如list,但在数据量大时,list的运行速度便不尽如意,Numpy(Numerical Python)提供了真正的数组功能,以及对数据 ...
- python常用序列list、tuples及矩阵库numpy的使用
近期开始学习python机器学习的相关知识,为了使后续学习中避免编程遇到的基础问题,对python数组以及矩阵库numpy的使用进行总结,以此来加深和巩固自己以前所学的知识. Section One: ...
- NumPy和Pandas常用库
NumPy和Pandas常用库 1.NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对整组数 ...
- Python 机器学习库 NumPy 教程
0 Numpy简单介绍 Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过numpy ...
- AI炼丹 - 深度学习必备库 numpy
目录 深度学习必备库 - Numpy 1. 基础数据结构ndarray数组 1.1 为什么引入ndarray数组 1.2 如何创建ndarray数组 1.3 ndarray 数组的基本运算 1.4 n ...
- 科学计算库Numpy基础&提升(理解+重要函数讲解)
Intro 对于同样的数值计算任务,使用numpy比直接编写python代码实现 优点: 代码更简洁: numpy直接以数组.矩阵为粒度计算并且支持大量的数学函数,而python需要用for循环从底层 ...
随机推荐
- 许家印67亿买下FF恒大是要雪中送炭吗?
从大环境来看,当下新能源汽车已经是备受投资者青睐的领域.据不完全统计,当下国内已经有300余家电动汽车企业.而蔚来.小鹏.威马等动辄都融资上百亿元,显现出火爆的发展趋势.甚至就连董明珠董大姐也有着自己 ...
- [GX/GZOI2019]宝牌一大堆(DP)
出这种麻将题有意思吗? 乍看很难实则很水,就是麻将式DP,想必大家很熟悉了吧.首先把“国士无双”和“七对子”两种牌型判掉,然后观察牌胡的形式,发现每多一张牌实际上就是把1个面子变成1个杠子,然后可以直 ...
- NOIP2013D1T3货车运输 (生成树+树链剖分)
给出一个图,询问图上两点间路径上最小边权的最大值. 先跑一次最大生成树. 树剖维护路径最小边权. 树剖又双叒叕写挂了. #include<cstring> #include<cstd ...
- 迅为iTOP-4418开发板编译Ubuntu
Ubuntu 系统比较特殊,源码就是它的镜像.Ubuntu 系统通过解压的方式进行烧写,我们也可以通过配置解压出来的 Ubuntu 系统源码文件夹,来配置 Ubuntu 系统.然后通过打包压缩的方式来 ...
- [LC] 347. Top K Frequent Elements
Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...
- 吴裕雄--天生自然python学习笔记:python 用pygame模块检测键盘事件和鼠标事件
用户可通过键盘输入来操控游戏中角色的运动,取得键盘事件的方法有以下两种 : 常用的按键与键盘常数对应表 : 按下右箭头键,蓝色小球会 向 右移动:按住右箭头键不放 , 球体会快速 向 右移 动, 若到 ...
- 用logstash 作数据的聚合统计
用logstash 作数据的聚合统计 以spark-streaming 处理消费数据,统计日志经spark sql存储在mysql中 日志写入方式为append val wordsDataFrame ...
- 正则表达式awk学习(三)
awk:格式化文本输出 gawk - pattern scanning and processing language awk:gawk的符号链接 基本用法:gawk [options] 'progr ...
- Centos-Apache服务(2)
title date tags layout CentOS6.5 Apache的增值服务 2018-09-03 Centos6.5服务器搭建 post 1.更改Apache的监听端口号 [root@l ...
- Spring-security整理
出于某些原因,需要学习一下spring的安全框架.(研究半天,如果单单说用户认证和授权这块儿,我感觉还是shiro好用.) spring security介绍可以参考一下以下文档: (满满的羡慕啊)我 ...