np.random.seed()函数用于生成指定随机数。
seed()被设置了之后,np.random.random()可以按顺序产生一组固定的数组,如果使用相同的seed()值,则每次生成的随机数都相同。
如果不设置这个值,那么每次生成的随机数不同。只在调用的时候seed()一次,不能使生成的随机数相同,需要每次调用都seed()一下,表示种子相同,从而生成的随机数相同。
#只在调用的时候seed()一次,生成不同的随机数
np.random.seed(1)
List1 = np.random.randn(4,4)
List2 = np.random.randn(4,4)
# List1 != List2
#每次调用都seed()同一个值
np.random.seed(1)
List3 = np.random.randn(4,4)
np.random.seed(1)
List4 = np.random.randn(4,4)
# List1 == List2
print("List1:",List1)
print("List2:",List2)
print("List3:",List3)
print("List4:",List4)
# 输出:
List1: [[ 1.62434536 -0.61175641 -0.52817175 -1.07296862]
[ 0.86540763 -2.3015387 1.74481176 -0.7612069 ]
[ 0.3190391 -0.24937038 1.46210794 -2.06014071]
[-0.3224172 -0.38405435 1.13376944 -1.09989127]]
List2: [[-0.17242821 -0.87785842 0.04221375 0.58281521]
[-1.10061918 1.14472371 0.90159072 0.50249434]
[ 0.90085595 -0.68372786 -0.12289023 -0.93576943]
[-0.26788808 0.53035547 -0.69166075 -0.39675353]]
List3: [[ 1.62434536 -0.61175641 -0.52817175 -1.07296862]
[ 0.86540763 -2.3015387 1.74481176 -0.7612069 ]
[ 0.3190391 -0.24937038 1.46210794 -2.06014071]
[-0.3224172 -0.38405435 1.13376944 -1.09989127]]
List4: [[ 1.62434536 -0.61175641 -0.52817175 -1.07296862]
[ 0.86540763 -2.3015387 1.74481176 -0.7612069 ]
[ 0.3190391 -0.24937038 1.46210794 -2.06014071]
[-0.3224172 -0.38405435 1.13376944 -1.09989127]]
#numpy.random.choice(a, size=None, replace=True, p=None)
#从a(只要是ndarray都可以,但必须是一维的)中随机抽取数字,并组成指定大小(size)的数组
# a为一维数组或int,如果是int,则生成随机样本,就好像a是np.arange(N)一样。
#replace:True表示可以取相同数字,False表示不可以取相同数字。代表的意思是抽样之后还放不放回去
#数组p:与数组a相对应,表示取数组a中每个元素的概率,默认为选取每个元素的概率相同。
除了numpy中的数组,python内建的list(列表)、tuple(元组)也可以使用。
print(np.random.choice(5)) #从[0, 5)中随机输出一个随机数
#相当于np.random.randint(0, 5)
print(np.random.choice(5, 3))#在[0, 5)内输出五个数字并组成一维数组(ndarray)
#相当于np.random.randint(0, 5, 3)
#输出
1
[0 4 1]
注意:不管是什么,它必须是一维的!
L = [1, 2, 3, 4, 5]#list列表
T = (2, 4, 6, 2)#tuple元组
A = np.array([4, 2, 1])#numpy,array数组,必须是一维的
A0 = np.arange(10).reshape(2, 5)#二维数组会报错
array = np.random.choice(L, 5)
print(array)
array = np.random.choice(T, 5)
print(array)
array = np.random.choice(A, 5)
print(array)
array = np.random.choice(A0, 5)#如果是二维数组,会报错
#输出
[1 1 4 3 2]
[2 6 2 2 6]
[2 2 2 4 4]
np.random.choice参数的 a 必须是一维的
print(np.random.choice(5, 6, replace=True))#可以看到有相同元素
print(np.random.choice(5, 6, replace=False))#会报错,因为五个数字中取六个,不可能不取到重复的数
字
#输出
[1 3 4 2 4 0]
aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']
print(np.random.choice(aa_milne_arr, 10, p=[0.6, 0.1, 0.1, 0.2]))
#可以看到,‘pooh’被选取的概率明显比其他几个高很多
['pooh' 'piglet' 'Christopher' 'piglet' 'pooh' 'piglet' 'pooh' 'pooh' 'Christopher' 'pooh']
split_traces_indexes = np.random.choice(np.arange(20),size=(4, 5),replace=False)
print(split_traces_indexes)
#输出
[[13 17 1 16 18]
[15 14 19 3 11]
[ 9 12 7 10 2]
[ 0 8 6 5 4]]
trace_files = [1,2,3,4,5,6,7,8,9,10,11,12]
split_traces_indexes = np.random.choice(np.arange(len(trace_files)),size=(3, 4),replace=False)
trace_file_change = np.array(trace_files)[split_traces_indexes]
print(split_traces_indexes)
print(trace_file_change)
#输出
[[10 9 1 11]
[ 7 2 5 4]
[ 6 8 0 3]]
[[11 10 2 12]
[ 8 3 6 5]
[ 7 9 1 4]]