本文的主要内容是基于中国大学mooc(慕课)中的“Python数据分析与可视化”课程进行整理和总结。
np.random的随机数函数
numpy的random子库可以为数组提供随机数的相关功能,书写格式为mp.random.*(*为函数名城)下面介绍几个基本的随机数函数。
rand(d0,d1,…,dn):根据d0-dn创建随机数数组,浮点数,(0,1),均匀分布;
randn(d0,d1,…,dn):根据d0-dn创建随机数数组,标准正态分布;
randint(low,high,shape):根据shape创建随机正数或正数数组,范围是[low,high);
seed(s):随机数种子,s是给定的种子数;
示例:
a = np.random.rand(3,4,5)
a
array([[[0.97017019, 0.3527823 , 0.60624838, 0.52925984, 0.44141665],
[0.56680268, 0.38601911, 0.43663509, 0.13782552, 0.7726391 ],
[0.5881991 , 0.29901631, 0.18105188, 0.21032785, 0.64600204],
[0.66994449, 0.28860224, 0.67514971, 0.33213358, 0.18316808]],
[[0.44588405, 0.48113294, 0.47640859, 0.69687669, 0.98937807],
[0.64327948, 0.80892477, 0.12188825, 0.21130757, 0.23650221],
[0.11075666, 0.0303736 , 0.08272969, 0.08042036, 0.83362655],
[0.54443201, 0.97959269, 0.85706236, 0.39817555, 0.2377417 ]],
[[0.25820845, 0.15002361, 0.34578785, 0.03221982, 0.41149256],
[0.8337201 , 0.18789227, 0.60394676, 0.4187256 , 0.05322977],
[0.28190376, 0.68089216, 0.61204052, 0.19191836, 0.40245508],
[0.21811994, 0.49755887, 0.81420446, 0.57002817, 0.41018938]]])
可以看到使用np.random.rand生成了指定维度的0到1之间的浮点数数组;
b = np.random.randn(3,4,5)
b
b
1
b
array([[[ 1.15820986, -0.86017609, -0.36744187, 1.69984648,
1.16991258],
[-0.40523958, -0.03323703, -1.83916289, 0.08608835,
-1.54670085],
[-0.59772161, 0.38805216, -0.88494707, 2.20252589,
-0.69140729],
[ 1.3748076 , 0.76376657, -0.84462998, -0.57090793,
0.33758422]],
[[-0.37533567, -0.23566638, -0.94819582, 1.22978933,
1.50724192],
[ 1.14427915, -0.15751491, 0.79007993, -0.50942165,
0.40158279],
[ 0.30827392, 0.80302948, -1.04744493, -0.22903935,
-0.26054347],
[-0.10196785, 1.07543435, -1.23409803, -0.42501521,
-0.9280709 ]],
[[-0.15084575, -1.00480456, -0.78245956, -0.30710344,
-1.23827147],
[ 1.85572365, 0.6125938 , 1.11737308, 0.74333166,
-1.78181963],
[ 0.65820808, 0.61815684, -0.39037261, 0.79982055,
0.43918389],
[ 0.61385158, 0.847761 , -0.70550522, -0.98063943,
0.51314707]]])
b中的每一个元素是根据正态分布的方式选取出来的;
c = np.random.randint(100,200,(3,4))
c
array([[129, 120, 113, 177],
[170, 145, 148, 194],
[171, 129, 142, 191]])
表示生成了100到200之间的一个3行4列的数组,默认情况下,元素的抽取符合均匀分布(抽取概率相同)。
np.random.seed(1)
a = np.random.randint(100,200,(3,4))
a
array([[106, 125, 150, 120],
[118, 184, 111, 128],
[129, 114, 150, 168]])
np.random.seed(1)
a = np.random.randint(100,200,(3,4))
a
array([[137, 112, 172, 109],
[175, 105, 179, 164],
[116, 101, 176, 171]])
通过设定和重复使用同一个随机数种子,在测试时得到相同的随机数数组。
高级的随机数函数功能
shuffle(a):根据数组a的第一轴(最外维度)进行随机排列,改变数组a;
permutation(a):根据数组a的第一轴产生一个新的乱序数组,不改变数组a:
choice(a[,size,replace,p]):从一维数组a中以概率p抽取元素,形成size形状的新数组,replace表示是否可以重复使用元素;
a = np.random.randint(100,200,(3,4))
a
array([[160, 181, 108, 188],
[113, 147, 172, 130],
[171, 103, 170, 121]])
np.random.shuffle(a)
a
array([[160, 181, 108, 188],
[171, 103, 170, 121],
[113, 147, 172, 130]])
可以看到数组a有了行之间的互换;
a = np.random.randint(100,200,(3,4))
a
array([[198, 187, 107, 126],
[125, 122, 109, 167],
[123, 127, 137, 157]])
np.random.permutation(a)
array([[125, 122, 109, 167],
[198, 187, 107, 126],
[123, 127, 137, 157]])
a
array([[198, 187, 107, 126],
[125, 122, 109, 167],
[123, 127, 137, 157]])
可以看出使用np.permutation(a)会生成一个新的数组,但是原数组a没有变化。
b = np.random.randint(100,200,(8,))
b
array([170, 102, 176, 191, 121, 175, 107, 177])
c = np.random.choice(b,(2,3))
c
array([[170, 191, 121],
[191, 121, 107]])
array([[170, 191, 121],
[191, 121, 107]])
array([[107, 176, 191],
[170, 102, 177]])
带有分布的产生数组的函数
uniform(low,high,size):从low到high之间等可能的生成一个size形状的函数;
normal(loc,scale,size):产生具有正态分布的数组,均值为loc,方差为scale,size为形状;
poisson(lam,size):产生具有泊松分布的数组,lam为随机时间概率,size为形状。
a = np.random.uniform(10,20,(3,4))
a
array([[16.37836484, 11.26314885, 16.90204588, 16.477494 ],
[13.53939089, 17.63233053, 13.56531724, 17.52788353],
[18.8134183 , 10.11669194, 14.9810907 , 10.73792011]])
b = np.random.normal(5,10,(3,4))
b
array([[10.12594636, 3.32139136, 18.46336282, -1.15491978],
[-2.43036696, 15.15936132, -0.55155414, 9.36259361],
[ 3.53310285, 5.23492824, 2.41697814, 23.39156191]])
1万+



被折叠的 条评论
为什么被折叠?



