1.1 seed([x])
x: 改变随机数生成器的种子 seed, x 可以是任意数字,如10,但不能为空。
seed的作用是让随机结果可重现,当设置相同的seed时,使用random()生成的随机数将会是同一个。
import random
random.seed(1000)
print(random.random())
print(random.random())
random.seed(1000)
print(random.random())
print(random.random())
>>>
0.7773566427005639
0.6698255595592497
0.7773566427005639
0.6698255595592497
1.2 rand 返回[0,1]之间,从均匀分布中抽取样本
import numpy as np
a=np.random.rand(3) #一维
b=np.random.rand(2,3) #二维
print(a)
print(b)
>>>
[0.44697358 0.03349412 0.27813818]
[[0.71474249 0.74637932 0.98222338]
[0.66229189 0.94427003 0.98985659]]
rand函数可以用来生成噪声,下面为一个带噪声的正弦曲线示例
import numpy as np
#绘制正弦曲线
x=np.linspace(-10,10,100)
y=np.sin(x)
z=np.random.rand(len(x)) #生成均匀分布,len(x轴)就是维度
plt.plot(x,y+z)
plt.show()
1.3 randn 返回标准正态分布随机数,平均数为0,方差为1
randn生成一个从标准正态分布中得到的随机变量,标准正态分布即 N(0,1) ,randn的用法与rand相同。
import numpy as np
a = np.random.randn(3)
b = np.random.randn(2,3)
c = np.random.randn(2,2,2)
print(a)
print(b)
print(c)
>>>
[-1.2590621 1.38328114 -0.77006196]
[[-1.13895892 0.13075651 -0.41164592]
[-0.34226603 -0.48445867 1.11279817]]
[[[-0.99056062 -0.35844967]
[ 0.76352262 0.54793668]]
[[-1.96319971 0.83237917]
[ 0.09956412 -0.31866979]]]
1.4 randint 随机整数
a = np.random.randint(3) # 随机生成[0,3)之间的整数
b = np.random.randint(1, 10) # 随机生成[1,10)之间的整数
c = np.random.randint(1, 10, (5, )) # 随机在[1,10)之间取5个元素组成一维数组
d = np.random.randint(1, 10, (2, 3)) # 随机在[1,10)之间取6个元素组成二维数组
print(a)
print(b)
print(c)
print(d)
>>>
2
3
[8 3 5 3 2]
[[9 1 6]
[2 5 7]]
1.5 random 生成0.0至1.0的随机数
a = np.random.random(3)
b = np.random.random((2,3))
c = np.random.random((2,2,3))
print(a)
print(b)
print(c)
>>>
[0.03760136 0.58006788 0.65261389]
[[0.41288383 0.23023674 0.02589372]
[0.89976144 0.31857206 0.18231546]]
[[[0.03716267 0.35935718 0.96734423]
[0.65647904 0.16369529 0.24393091]]
[[0.09289193 0.44310636 0.50525154]
[0.86678832 0.72846957 0.82237951]]]
1.6 choice 从一维数组中生成随机数
第一个参数是1个一维数组,如果只有一个数字就看成range(5)
第二个参数是维度和元素个数,一个数字是1维,数字是几就是几个元素
a = np.random.choice(5,3)
b = np.random.choice(5,(2,3))
c = np.random.choice([3,4,5,10,13,16,20],3)
print(a)
print(b)
print(c)
>>>
[0 4 3]
[[2 1 1]
[3 2 4]]
[13 3 10]
1.7 shuffle对数组进行重排
注意这里多维数组是对axis0进行重排,其他轴不变
下面的例子中,二维数组只有行的顺序发生了变化,列并没有发生变化
import numpy as np
a = np.arange(10)
np.random.shuffle(a)
print(a)
b = np.arange(12).reshape(3,4)
np.random.shuffle(b)
print(b)
>>>
[8 9 5 3 0 6 2 4 1 7]
[[ 8 9 10 11]
[ 0 1 2 3]
[ 4 5 6 7]]
1.8 permutation 对数组进行重排
permutation和上面shuffle的作用一样,就是把数组进行重排
区别在于permutation后原来的数组并不发生变化,返回排序后的新数组,而shuffle的返回值为空,直接对原数组进行重排。
c = np.arange(20).reshape(4,5)
d= np.random.permutation(c)
print(c)
print(d)
>>>
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
[[10 11 12 13 14]
[ 0 1 2 3 4]
[ 5 6 7 8 9]
[15 16 17 18 19]]
1.9 normal 生成正态分布数字
normal [平均值,方差,size]
import numpy as np
a = np.random.normal(1,10,10) # 平均值1,方差10,10个数
正态(高斯)分布的重要性质:
① 密度函数关于平均值对称
② 平均值是它的众数(statistical mode)以及中位数(median)
③ 函数曲线下68.268949%的面积在平均值左右的一个标准差范围内
④ 95.449974%的面积在平均值左右两个标准差2σ的范围内
⑤ 99.730020%的面积在平均值左右三个标准差3σ的范围
1.10 uniform 均匀分布
相比于rand,uniform可以指定均匀抽取随机数区间
import numpy as np
a = np.random.uniform(1,10,10) #在1到10之间生成10个随机数
b = np.random.uniform(1,10,(2,3)) #在1到10之间生成2行3列共计6个随机数
print(a)
print(b)
>>>
[7.14400238 2.90514403 5.08180631 8.8957117 4.5676755 5.43261469
5.8423515 7.99743819 9.82741622 6.84344757]
[[5.17510957 2.69849032 3.52172104]
[6.11546984 5.66389906 4.99856279]]