Python基础——numpy.random的使用

Numpy中的random模块用于生成随机数,常用函数的用法总结如下:

1. 产生随机数

  • numpy.random.rand(d1,d2,d3...dn):生成一个[0,1)之间的随机浮点数或N维浮点数组。
>>>import numpy as np

>>>np.random.rand(10)    #生成shape = 10 的一维随机数组
Out[1]: 
array([ 0.7154292 ,  0.65042837,  0.99854959,  0.1219843 ,  0.8993502 ,
        0.61108002,  0.18613111,  0.82756742,  0.77026329,  0.52016216])

>>>np.random.rand(2,4)    ##生成shape = (2,4) 的二维随机数组
Out[2]: 
array([[ 0.5644889 ,  0.10957407,  0.77592356,  0.21419645],
       [ 0.5584306 ,  0.70697347,  0.0706628 ,  0.45280476]])
  • numpy.random.randn(d1,d2,d3...dn):生成一个浮点数或N维浮点数组,取数范围:正态分布的随机样本数。
>>>import numpy as np

>>>np.random.randn(10)    #生成shape = 10的、满足正态分布的一维随机数组
Out[1]: 
array([-2.68867714,  1.30553568, -1.89705101,  0.22017578,  0.17460159,
       -0.4780114 ,  0.43347645,  0.18678857,  0.31898526, -0.07099354])

>>>np.random.randn(2,4)    #生成shape = (2,4)的、满足正态分布的二维随机数组
Out[2]: 
array([[ 0.1996084 ,  0.0290392 ,  1.21453716,  0.27951229],
       [ 0.91439426,  0.37279807,  0.02867786,  0.31190854]])
  • numpy.random.randint(low, high, size):返回随机的整数,位于半开区间 [low, high)。
>>>import numpy as np

>>>np.random.randint(10, size=10)  #生成一个位于半闭区间[0,10)内的size = 10一维随机整数数组
Out[1]: array([8, 0, 8, 4, 4, 0, 2, 0, 3, 2])

>>>np.random.randint(10, size=(2,5))  #生成一个位于半闭区间[0,10)内的size = (2,5)二维随机整数数组
Out[2]: 
array([[4, 8, 9, 1, 7],
       [5, 2, 2, 9, 1]])

>>>np.random.randint(0, 5, size=(2,5))  #生成一个位于半闭区间[0,5)内的size = (2,5)二维随机整数数组
Out[3]: 
array([[3, 4, 1, 2, 0],
       [3, 0, 1, 2, 1]])
  • numpy.random.standard_normal(size=None):生产一个浮点数或N维浮点数组,取数范围:标准正态分布随机样本。
>>>import numpy as np

>>>np.random.standard_normal(10)   #生成shape = 10的、满足标准正态分布的一维随机数组
Out[1]: 
array([-1.22636697, -1.23204532,  1.53296935, -0.43775173, -0.92269813,
       -0.58454018, -0.02354275,  1.01765777, -0.2336743 ,  0.80389956])

>>>np.random.standard_normal((2,4))  #生成shape = (2,4)的、满足标准正态分布的二维随机数组
Out[2]: 
array([[-0.51991048, -1.26169166,  0.2132792 ,  0.23725484],
       [ 1.23004584,  0.90366112, -0.11723758,  0.32600119]])
  • numpy.random.choice( a, size=None, replace=True, p=None ):从序列中获取元素,若a为整数,元素取值为np.range(a)中随机数;若a为数组,取值为a数组元素中随机元素。
>>>import numpy as np

>>>np.random.choice(2)   #生成一个range(2)中的随机数
Out[2]: 1

>>>np.random.choice(2,2)   #生成一个shape = 2 一维数组
Out[3]: array([1, 1])

>>>np.random.choice(5,(2,3))   #生成一个shape = (2,3) 二维数组
Out[4]: array([[4, 1, 1],
               [2, 4, 4]])

np.random.choice(np.array(['a','b','c','f'])) #生成一个np.array(['a','b','c','f']中随机元素
Out[5]: 'f'

np.random.choice(5, p=[0,0,0,0,1])  #以p的概率来生成随机数,生成的始终是4
Out[6]: 4

np.random.choice(5,3,p=[0,0.5,0.5,0,0])  #生成shape = 3的一维数组,元素取值为1或2的随机数
Out[7]: array([2, 2, 2], dtype=int64)
  • numpy.random.bytes ( length ):返回随机字节。
>>>import numpy as np

>>>np.random.bytes(10)
Out[1]: b'\x95\x8fa\x01\x8d\xfa\xc9i\x13~'

>>>np.random.bytes(5)
Out[2]: b's\xf3\xba\xb1\x9b'

2. 排列操作

  • numpy.random.shuffle ( x ):现场修改序列,改变自身内容。(类似洗牌,打乱顺序)
>>>import numpy as np

>>>A = np.arange(10)
>>>print(A)
[0 1 2 3 4 5 6 7 8 9]

>>>np.random.shuffle(A)
>>>print(A)
[3 0 7 4 9 5 2 1 6 8]

>>>B = np.arange(9).reshape((3, 3))
>>>print(B)
Out[1]: array([[0, 1, 2],
               [3, 4, 5],
               [6, 7, 8]])

>>>np.random.shuffle(B)
>>>print(B)
Out[11]: array([[6, 7, 8],
                [0, 1, 2],
                [3, 4, 5]])
  • numpy.random.permutation ( x ):返回一个随机排列
>>>import numpy as np

>>>np.random.permutation(10)
Out[1]: array([7, 9, 5, 0, 3, 6, 1, 4, 8, 2])

>>>np.random.permutation([1, 4, 9, 12, 15])
Out[2]: array([ 1,  9, 15, 12,  4])

>>>A = np.arange(9).reshape((3, 3))
>>>print(A)
Out[3]: array([[0, 1, 2],
               [3, 4, 5],
               [6, 7, 8]])

>>>np.random.permutation(A)
Out[4]: array([[0, 1, 2],
               [6, 7, 8],
               [3, 4, 5]])

3. 随机数生成器

  • numpy.random.RandomState():指定种子值是为了使同样的条件下每次产生的随机数一样,避免程序调试时由随机数不同而引起的问题。
>>>import numpy as np

>>>np.random.RandomState(2018).randn(2,3)  #第一次产生(2,3)的数组
Out[3]: 
array([[-0.2767676 ,  0.581851  ,  2.14839926],
       [-1.279487  ,  0.50227689,  0.8560293 ]])

>>>np.random.RandomState(2018).randn(2,3)   #第二次产生(2,3)的数组
Out[4]: 
array([[-0.2767676 ,  0.581851  ,  2.14839926],
       [-1.279487  ,  0.50227689,  0.8560293 ]])

>>>np.random.randn(2,3)   #不指定种子数,第一次产生(2,3)的数组
Out[5]: 
array([[-0.23270408, -0.94468073, -1.2362389 ],
       [ 0.1987348 ,  0.78362735,  0.86252443]])

>>>np.random.randn(2,3)    #不指定种子数,第二次产生(2,3)的数组
Out[6]: 
array([[-2.14304926,  0.06838721,  1.0947292 ],
       [-0.59087582,  0.4183132 , -0.63660259]])
  • numpy.random.seed ( ):用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
>>>import numpy as np

>>>np.random.seed(2018)
>>>np.random.randn(2,3)    #使用seed时,第一次产生(2,3)的随机数组
Out[1]: 
array([[-0.2767676 ,  0.581851  ,  2.14839926],
       [-1.279487  ,  0.50227689,  0.8560293 ]])

>>>np.random.seed(2018)
>>>np.random.randn(2,3)    #使用seed时,第二次产生(2,3)的随机数组
Out[2]: 
array([[-0.2767676 ,  0.581851  ,  2.14839926],
       [-1.279487  ,  0.50227689,  0.8560293 ]])

>>>np.random.randn(2,3)    #不使用seed时,第一次产生(2,3)的随机数组
Out[3]: 
array([[-0.14279008,  0.11007867, -0.68806479],
       [ 0.43356408,  0.510221  , -0.16513097]])

>>>np.random.randn(2,3)    #使用seed时,第一次产生(2,3)的随机数组
Out[4]: 
array([[-1.35177905,  0.54663075,  1.23065512],
       [ 1.0764461 , -1.21062488, -0.30667657]])

 

你可能感兴趣的:(python)