天天看点

numpy中的random

numpy.random.randn()与rand()的区别

numpy.random.randn(d0, d1, …, dn):返回一个样本,具有标准正态分布。

numpy.random.rand(d0, d1, …, dn):生成[0.0, 1.0)之间的随机浮点数,当没有参数时,返回一个随机浮点数,当有一个参数时,返回该参数长度大小的一维随机浮点数数组,参数建议是整数型。

arr1 = np.random.randn(2,4)
print(arr1)
print('******************************************************************')
arr2 = np.random.rand(2,4)
print(arr2)
arr3 = np.random.rand()
print(arr3)
arr4 = np.random.rand(5)
print(arr4)
           

结果:

[[ 0.95563278 -0.42082697 -0.10447564 0.20068979]

[ 0.32868982 -0.09721076 -0.60840784 1.06532637]]

[[0.8550732 0.3942764 0.4174943 0.02579094]

[0.5020993 0.97848433 0.73730149 0.56157421]]

0.6780456350566645

[0.2493412 0.09923811 0.4561304 0.57118332 0.19036296]

numpy.random.randint(low, high, size, dtype)

numpy.random.randint(low, high, size, dtype):返回low<=n<high范围的size大小的dtype类型的数,默认的数据类型是np.int

arr6 = np.random.randint(2,8,[3,4])
print(arr6)
arr7 = np.random.randint(1)  #low=1 输出[0,1)内的一个整数
print(arr7)
arr8 = np.random.randint(1,size=(2,2))  #low=1 size=2行2列 输出[0,1)内的一个整数数组
print(arr8)
arr9 = np.random.randint(1,(2,2)) 
print(arr9)
arr10 = np.random.randint(0,2)  #输出[0,2)内的一个整数
print(arr10)
           

结果:

[[7 2 6 3]

[3 7 4 5]

[7 7 2 5]]

[[0 0]

[0 0]]

[1 1]

random_integers(low, high, size])

random_integers(low, high, size]):返回随机的整数,位于闭区间 [low, high],若high=None,则取值区间变为[1,low]

arr11 = np.random.random_integers(5)
print(arr11)
arr12 = np.random.random_integers(1,4,size=(2,2))  
print(arr12)
           

结果:

4

[[3 3]

[3 3]]

np.random.random([size])

np.random.random([size]):返回指定size的[0,1)随机数矩阵

arr13 = np.random.random(size = [3,4])
print(arr13)
print('******************************************************************')
arr14 = np.random.random( [3,4])
print(arr14)
           

结果:

[[0.26527803 0.67171034 0.70246548 0.44825096]

[0.76077803 0.20380073 0.74659596 0.14237619]

[0.31434966 0.94426788 0.15483195 0.91344428]]

[[0.04324279 0.69555479 0.21200804 0.53683548]

[0.72102381 0.08728245 0.59588028 0.63236087]

[0.40306908 0.814989 0.40163824 0.31842295]]

random_sample、ranf、sample与random作用一样

print('***********************  random_sample  ******************************')
arr15 = np.random.random_sample(size = [3,4])
print(arr15)
print('******************************************************************')
arr16 = np.random.random_sample( [3,4])
print(arr16)

print('*************************  ranf  ************************************')
arr17 = np.random.ranf(size = [3,4])
print(arr17)
print('******************************************************************')
arr18 = np.random.ranf( [3,4])
print(arr18)

print('*************************  sample  **********************************')
arr19 = np.random.sample(size = [3,4])
print(arr19)
print('******************************************************************')
arr20 = np.random.sample( [3,4])
print(arr20)
           

结果:

*********************** random_sample ******************************

[[0.29412804 0.1122396 0.78856723 0.77634053]

[0.96633261 0.58307661 0.07775629 0.27186676]

[0.27539102 0.60943539 0.39007386 0.338068 ]]

[[0.33488086 0.64228799 0.1931146 0.5447358 ]

[0.43556001 0.73542035 0.04830766 0.56365099]

[0.11061345 0.34026631 0.50136089 0.6177079 ]]

************************* ranf ************************************

[[0.34037612 0.44853875 0.63862045 0.05866474]

[0.43913938 0.20100475 0.03291312 0.98640117]

[0.09788694 0.01432033 0.23571517 0.06873537]]

[[0.87444881 0.39837238 0.27922098 0.00149966]

[0.04010832 0.92848349 0.60876142 0.72710036]

[0.18204139 0.20113217 0.43439843 0.14669335]]

************************* sample **********************************

[[0.59275057 0.02409834 0.31335879 0.71755522]

[0.62607108 0.45795429 0.90791699 0.44383454]

[0.59197212 0.31904985 0.66013448 0.92794311]]

[[0.88094892 0.97530443 0.55994939 0.66326205]

[0.46094444 0.93092115 0.13792183 0.10992606]

[0.7725916 0.72609672 0.69457137 0.10830374]]

np.random.shuffle(x)与np.random.permutation(x)

shuffle直接在原来的数组上进行操作,改变原来数组的顺序,无返回值。

permutation不直接在原来的数组上进行操作,而是返回一个新的打乱顺序的数组,并不改变原来的数组。

arr22 = np.arange(10)
print(arr22)
print(np.random.shuffle(arr22))
print(arr22)
           

结果:

[0 1 2 3 4 5 6 7 8 9]

None

[3 0 1 9 7 2 6 4 8 5]

arr26 = np.arange(10)
print(arr26)
print(np.random.permutation(arr26))
print(arr26)
           

结果:

[0 1 2 3 4 5 6 7 8 9]

[8 1 3 9 5 6 7 4 0 2]

[0 1 2 3 4 5 6 7 8 9]

numpy.random.choice(a,size=None,replace=True,p=None)

若a为数组,则从a中选取元素;若a为单个int类型数,则选取range(a)中的数

replace是bool类型,为True,则选取的元素会出现重复;反之不会出现重复

p为数组,里面存放选到每个数的可能性,即概率

arr21 = np.random.choice(5,size=4,replace=True,p=[0.1,0.1,0.3,0.4,0.1])
print(arr21)
arr21 = np.random.choice([5,3,1,6,7],size=4,replace=False,p=[0.1,0.1,0.3,0.4,0.1])
print(arr21)
           

结果:

[3 1 2 3]

[5 6 7 1]

np.random.seed()

设置相同的seed时,每次生成的随机数相同

np.random.seed(3)
arr23 = np.random.rand(5)
print(arr23)
           

结果:

[0.5507979 0.70814782 0.29090474 0.51082761 0.89294695]

np.random.seed(3)
arr24 = np.random.rand(5)
print(arr24)
           

结果:

[0.5507979 0.70814782 0.29090474 0.51082761 0.89294695]