首页 > 技术文章 > Python——Numpy的random子库

yifdu25 2018-01-03 10:19 原文

NumPy的random子库

np.random.*

np.random.rand()

np.random.randn()

np.random.randint()

import numpy as np

a=np.random.rand(3,4,5)

a
Out[83]: 
array([[[ 0.08662874,  0.82948848,  0.68358736,  0.85925231,  0.18250681],
        [ 0.62005734,  0.38014728,  0.85111772,  0.07739155,  0.9670788 ],
        [ 0.83148769,  0.98684984,  0.17931358,  0.78663687,  0.32991487],
        [ 0.41630481,  0.40143165,  0.39719115,  0.35902372,  0.80809515]],

       [[ 0.83119559,  0.84908059,  0.03704835,  0.99169556,  0.25103526],
        [ 0.54950967,  0.21890653,  0.50118637,  0.61440841,  0.33158322],
        [ 0.28599297,  0.6478492 ,  0.42480153,  0.64245498,  0.50198969],
        [ 0.87671252,  0.4551307 ,  0.18533867,  0.38861156,  0.98937246]],

       [[ 0.21903302,  0.76057185,  0.51972563,  0.28018995,  0.9267844 ],
        [ 0.49750795,  0.86679355,  0.60877593,  0.9502196 ,  0.63946047],
        [ 0.7766992 ,  0.51985393,  0.9756528 ,  0.57621679,  0.87955331],
        [ 0.6432478 ,  0.35046943,  0.91971312,  0.51282177,  0.13310527]]])
sn=np.random.randn(3,4,5)

sn
Out[86]: 
array([[[-0.15116386,  0.85164049,  2.04232044,  0.5412239 , -0.65171862],
        [-0.23334418, -0.44215246, -1.19597071, -1.2189118 ,  0.02157593],
        [ 0.91657483,  0.2611884 ,  1.11715427, -1.02409543, -1.38927614],
        [-0.19741865, -0.15042967,  1.174679  ,  1.27795408, -0.31847884]],

       [[ 1.4637826 ,  1.43320029, -0.60038343,  1.39244389, -0.75747975],
        [ 0.52065785, -0.64790451, -0.32049525,  1.17868116, -0.05638849],
        [ 0.22874314,  0.68671056, -1.69309123, -0.54882906, -0.23721541],
        [-0.31578954, -0.44044017, -1.31905554,  2.13304617, -0.63259492]],

       [[ 0.23859545,  0.40294529, -0.2073546 , -0.90358886, -0.07341441],
        [-0.65382437, -0.21540712, -0.18190539, -1.32444175, -0.49808978],
        [ 0.68718048,  1.23431895,  0.01745539,  0.74168673,  2.06773505],
        [-2.61703882,  0.02591586, -0.45429583, -0.09624749, -0.44027003]]])

b=np.random.randint(100,200,(3,4))

b
Out[88]: 
array([[133, 149, 151, 197],
       [160, 187, 108, 140],
       [139, 103, 168, 123]])

b=np.random.randint(100,200,(3,4))

b
Out[90]: 
array([[166, 144, 136, 107],
       [106, 194, 175, 127],
       [115, 107, 132, 178]])


np.random.seed(10)

np.random.randint(100,200,(3,4))
Out[92]: 
array([[109, 115, 164, 128],
       [189, 193, 129, 108],
       [173, 100, 140, 136]])

np.random.seed(10)

np.random.randint(100,200,(3,4))
Out[94]: 
array([[109, 115, 164, 128],
       [189, 193, 129, 108],
       [173, 100, 140, 136]])


np.random.seed(5)

np.random.randint(100,200,(3,4))
Out[97]: 
array([[199, 178, 161, 116],
       [173, 108, 162, 127],
       [130, 180, 107, 176]])

np.random.seed(5)

np.random.randint(100,200,(3,4))
Out[99]: 
array([[199, 178, 161, 116],
       [173, 108, 162, 127],
       [130, 180, 107, 176]])

给定随机数组种子之后,产生的随机数组不变。

shuffle函数

import numpy as np

a=np.random.randint(100,200,(3,4))

a
Out[102]: 
array([[115, 153, 180, 127],
       [144, 177, 175, 165],
       [147, 130, 184, 186]])

np.random.shuffle(a)

a
Out[104]: 
array([[147, 130, 184, 186],
       [115, 153, 180, 127],
       [144, 177, 175, 165]])

np.random.shuffle(a)

a
Out[106]: 
array([[147, 130, 184, 186],
       [115, 153, 180, 127],
       [144, 177, 175, 165]])

np.random.shuffle(a)

a
Out[108]: 
array([[144, 177, 175, 165],
       [147, 130, 184, 186],
       [115, 153, 180, 127]])

shuffle函数随意调换两轴
permutation函数

a=np.random.randint(100,200,(3,4))

a
Out[110]: 
array([[141, 162, 101, 182],
       [116, 178, 105, 158],
       [100, 180, 104, 136]])

np.random.permutation(a)
Out[111]: 
array([[141, 162, 101, 182],
       [100, 180, 104, 136],
       [116, 178, 105, 158]])

a
Out[112]: 
array([[141, 162, 101, 182],
       [116, 178, 105, 158],
       [100, 180, 104, 136]])

permutation 函数作用之后并不改变数组a
choice 函数,抽取

import numpy as np

b=np.random.randint(100,200,(8,))

b
Out[115]: array([127, 131, 102, 168, 138, 183, 119, 118])

np.random.choice(b,(3,2))
Out[116]: 
array([[131, 183],
       [118, 138],
       [138, 183]])

np.random.choice(b,(3,2),replace=False)
#replace表示是否可以重复抽取,默认为False
Out[117]: 
array([[102, 131],
       [127, 138],
       [183, 168]])

np.random.choice(b,(3,2),p=b/np.sum(b))
#p是随机概率,出现几率与数字大小成正比。
Out[118]: 
array([[118, 127],
       [183, 183],
       [131, 183]])

import numpy as np

q=np.random.uniform(0,10,(3,4))

q
Out[122]: 
array([[ 5.75413707,  5.79721399,  0.64506899,  1.7724613 ],
       [ 3.41527086,  6.08702583,  1.95474956,  1.21548467],
       [ 9.34679509,  3.10979918,  4.74316569,  0.62211558]])

n=np.random.normal(10,5,(3,4))

n
Out[124]: 
array([[  5.46196987,   6.27937203,   9.22652647,  12.7923338 ],
       [  2.38821804,   5.53678405,  13.12062969,   5.9740824 ],
       [ 11.06140028,  12.46176925,  18.3372659 ,   0.47620034]])

参考文献:

https://zhuanlan.zhihu.com/p/26889091

推荐阅读