Random
生成单个随机数
# encoding:utf-8 import random ### 生成单元素 a = random.random() # 返回0-1之间的随机浮点数 print(a) # 0.2473362446838867 b = random.uniform(1, 10) # 返回指定范围内的随机浮点数,上下限可互换 print(b) # 3.7800015747308917 print(random.uniform(10, 1)) # 6.59216478923806 c = random.randint(1, 10) # 返回指定范围内的整数,上下限不可互换 print(c) # 8 # print(random.randint(10, 1)) d = random.randrange(1, 10, 2) # 返回序列内的一个随机数,注意此处并不生成序列 print(d) # 7 e = random.choice(range(10)) # 随机选择序列内的一个数 print(e) # 3 # f = random.choices(range(10)) # # 返回一个单元素的子序列 # print(f) # [7] g = random.sample(range(10), 3) # 从序列中随机选择n个元素,注意返回的顺序是乱序 print(g) # [8, 2, 9] data = [1, 2, 3, 4, 5] j = random.shuffle(data) # 将序列顺序打乱,注意这里不生成新序列,也就是这个序列必须是可变数据 print(j) # None print(data) # [1, 4, 5, 2, 3] # 如果是不可变数据 data2 = (1, 2, 3, 4, 5) data2_shuffle = random.sample(data2, len(data2)) print(data2_shuffle) # [1, 3, 4, 2, 5]
注意python2中没有 random.choices
随机种子seed
seed方法改变随机数生成器的种子,通常在调用随机模块之前调用该方法。
seed种子相同时,生成的随机数相同,seed种子不同时,生成的随机数不同,种子之间可以互相切换。
print(random.random()) # 随机生成 random.seed(0) print(random.random()) # 每次结果相同 0.844421851525 print(random.random()) # 每次结果也相同,但不同于上一句的结果 0.75795440294 random.seed(1) print(random.random()) # 0.134364244112 random.seed(0) print(random.random()) # 0.844421851525 可以根据seed切换 print(np.random.random()) # 随机的,random模块设定seed不影响np模块 np.random.seed(0) print(np.random.random()) # 每次结果相同
Numpy
import numpy as np nr=np.random nr.seed(0) np.set_printoptions(precision=2) # 只显示小数点后2位 ### rand print(nr.rand(3,4)) # 产生[0,1]的浮点随机数,括号里面的参数可以指定产生数组的形状 # [[0.55 0.72 0.6 0.54] # [0.42 0.65 0.44 0.89] # [0.96 0.38 0.79 0.53]] print(nr.rand()) # 0.568044561094 ### randn print(nr.randn(3,4)) # 产生标准正态分布随机数,参数含义与random相同 # [[ 0.76 0.12 0.44 0.33] # [ 1.49 -0.21 0.31 -0.85] # [-2.55 0.65 0.86 -0.74]] ### randint print(nr.randint(1,10,size=(2,5))) # 产生指定范围的随机数,最后一个参数是元祖,他确定数组的形状 # [[8 3 1 1 5] # [6 6 7 9 5]] print(nr.randint(1,10)) # 5 print(nr.randint([1, 2, 3], [10, 9 ,8], size=(2,3))) # 分别给每列指定范围,前两个参数的 len 要等于 size[1] # [[2 6 4] # [9 3 4]] ### normal print(nr.normal(100,10,size=(4,2))) # 正态分布 第一个参数是均值,第二个参数是标准差 # [[108.13 97.71] # [121.62 90.43] # [100.67 102.06] # [ 95.43 89.4 ]] print(nr.normal([100, 90],[10, 3],size=(4,2))) # 分别给每列指定均值方差 ### uniform print(nr.uniform(0,10,size=(3,4))) # 均匀分布 前两个参数分别是区间的初始值和终值 # [[7.51 6.08 3.25 0.38] # [6.34 9.59 6.53 6.35] # [9.95 5.82 4.14 4.75]] print(nr.uniform([0, 0, 1, 1], [10, 9, 8 ,7], size=(3,4))) # 分别给每列指定范围 ### possion print(nr.poisson(2.0,size = (3,4))) # 泊松分布 第一个参数为指定的lanbda系数 # [[3 3 5 1] # [3 3 5 1] # [3 2 1 2]] ### permutation # permutation()随机生成一个乱序数组,当参数是n时,返回[0,n)的乱序,他返回一个新数组。 r1 = nr.randint(10,100,size = (3,4)) print(nr.permutation(r1)) # [[50 82 29 82] # [71 24 14 77] # [36 76 62 77]] print(nr.permutation(5)) # [0 3 1 2 4] ### shuffle # 使用shuffle打乱数组顺序,打乱原数组,不返回新数组 x = np.arange(10) y = nr.shuffle(x) print(y) # None print(x) # [2 4 3 7 1 6 5 9 0 8] ### choice # choice()函数从指定数组中随机抽取样本,size参数用于指定输出数组的大小 # replace参数为True时,进行可重复抽取,而False表示进行不可重复的抽取。默认为True x = np.array(10) c1 = nr.choice(x,size = (2,3)) print(c1) # [[6 5 3] # [1 8 0]] c2 = nr.choice(x,5,replace = False) print(c2) # [2 9 1 3 8]
TF
import tensorflow as tf sess = tf.InteractiveSession() ### 生成符合正态分布的随机值 # tf.random_normal(shape, mean, stddev, dtype, seed, name) a = tf.random_normal([2, 3], name='a') print(a.eval()) # [[-1.2077953 -0.69333565 -0.10252991] # [ 0.51914424 0.7754795 -0.02618051]] ### 生成截断的正态分布的随机值 ## 只保留[mean - 2stddev, mean + 2stddev]内的随机数 # tf.truncated_normal(shape, mean, stddev, dtype, seed, name) b = tf.truncated_normal([2, 3], name='b') print(b.eval()) # [[-1.8038174 1.521785 0.33182728] # [ 1.0274183 -0.39916983 -0.50485927]] ### 生成均匀分布的随机数 # tf.random_uniform(shape, minval, maxval, dtype, seed, name) c = tf.random_uniform([2, 3], name='c') print(c.eval()) # [[0.6636964 0.20990396 0.44687605] # [0.64548564 0.22155988 0.19247997]] ### 按行乱序 # tf.random_shuffle(value, dtype, name) d = tf.random_shuffle([[1, 2], [3, 2]], name='d') print(d.eval())
random VS np.random
1. randint 边界问题,random 包含边界,np 不包含
for i in range(10): print(np.random.randint(1, 3), random.randint(1, 3)) # np 不包涵3, random 包含3 # 1 3 # 2 2 # 2 2 # 2 3 # 2 3 # 1 1 # 1 2 # 2 1 # 1 2 # 1 1