代碼中經常會用到隨機的部分,此時需要使用程序自帶的偽隨機數發生器,本文記錄常用方法。
Python中的random模塊用於生成隨機數。下面介紹一下random模塊中最常用的幾個函數。
用於生成一個0到1的隨機符點數: 0 <= n < 1.0。
用於生成一個在[a, b]均勻分布上的隨機數。
用於生成一個指定范圍內的整數。
從序列中獲取一個隨機元素。
用於將一個列表中的元素打亂。
從指定序列中隨機(無放回)獲取指定長度的片斷。
產生 [d0, d1, …, dn] 維度的隨機數矩陣,數據取自[0,1]均勻分布
np.random.rand(3,2)
產生 [d0, d1, …, dn] 維度的隨機數矩陣,數據取自標准正態分布
產生半開半閉區間 [low, high)中的隨機整數,返回 size 個
a: sequence 或者 數字(表示序列)
size: 取樣個數
replace: True 有放回 False 無放回
p: 概率列表
Examples
Generate a uniform random sample from np.arange(5) of size 3:
>>> np.random.choice(5, 3)
array([0, 3, 4])
>>> #This is equivalent to np.random.randint(0,5,3)
Generate a non-uniform random sample from np.arange(5) of size 3:
>>> np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])
array([3, 3, 0])
Generate a uniform random sample from np.arange(5) of size 3 without replacement:
>>> np.random.choice(5, 3, replace=False)
array([3,1,0])
>>> #This is equivalent to np.random.permutation(np.arange(5))[:3]
Generate a non-uniform random sample from np.arange(5) of size 3 without replacement:
>>> np.random.choice(5, 3, replace=False, p=[0.1, 0, 0.3, 0.6, 0])
array([2, 3, 0])
Any of the above can be repeated with an arbitrary array-like instead of just integers. For instance:
>>> aa_milne_arr = [‘pooh‘, ‘rabbit‘, ‘piglet‘, ‘Christopher‘]
>>> np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])
array([‘pooh‘, ‘pooh‘, ‘pooh‘, ‘Christopher‘, ‘piglet‘],
dtype=‘|S11‘)
返回 length 個隨機字節。
>>> np.random.bytes(10)
‘ eh\x85\x022SZ\xbf\xa4‘ #random
返回一個隨機排列
>>> np.random.permutation(10)
array([1, 7, 4, 3, 0, 9, 2, 5, 8, 6])
>>> np.random.permutation([1, 4, 9, 12, 15])
array([15, 1, 9, 4, 12])
>>> arr = np.arange(9).reshape((3, 3))
>>> np.random.permutation(arr)
array([[6, 7, 8],
[0, 1, 2],
[3, 4, 5]])
現場修改序列,改變自身內容。
>>> arr = np.arange(10)
>>> np.random.shuffle(arr)
>>> arr
[1 7 5 2 9 4 3 6 0 8]
This function only shuffles the array along the first index of a multi-dimensional array:
>>> arr = np.arange(9).reshape((3, 3))
>>> np.random.shuffle(arr)
>>> arr
array([[3, 4, 5],
[6, 7, 8],
[0, 1, 2]])