1. 程式人生 > >python產生隨機陣列

python產生隨機陣列

研究排序問題的時候常常需要生成隨機陣列來驗證自己排序演算法的正確性和效能,今天把Python生成隨機陣列的方法稍作總結,以備以後檢視使用。


一、使用random模組生成隨機陣列


python的random模組中有一些生成隨機數字的方法,例如random.randint, random.random, random.uniform, random.randrange,這些函式大同小異,均是在返回指定範圍內的一個整數或浮點數,下邊簡單解釋一下這幾個函式。


1、random.randint(low, hight) -> 返回一個位於[low,hight]之間的整數


該函式接受兩個引數,這兩個引數必須是整數(或者小數位是0的浮點數),並且第一個引數必須不大於第二個引數


>>> import random
>>> random.randint(1,10)
6
>>> random.randint(1.0, 10.0)
 1 2 3 4 5 1 2 3 4 5
2、random.random() -> 不接受引數,返回一個[0.0, 1.0)之間的浮點數


>>> random.random()
0.5885821552646049

3、random.uniform(val1, val2) -> 接受兩個數字引數,返回兩個數字區間的一個浮點數,不要求val1小於等於val2


>>> random.uniform(1,5.0)
4.485403087612088
>>> random.uniform(9.9, 2)
5.189511116007191

*4、random.randrange(start, stop, step) -> 返回以start開始,stop結束,step為步長的列表中的隨機整數,同樣,三個引數均為整數(或者小數位為0),若start大於stop時 ,setp必須為負數.step不能是0.*

>>> random.randrange(1, 100, 2)  #返回[1,100]之間的奇數
19
>>> random.ranrange(100, 1, -2)  #返回[100,1]之間的偶數

5、生成隨機陣列

下邊我們用random.randint來生成一個隨機陣列


import random
def random_int_list(start, stop, length):
    start, stop = (int(start), int(stop)) if start <= stop else (int(stop), int(start))
    length = int(abs(length)) if length else 0
    random_list = []
    for i in range(length):
        random_list.append(random.randint(start, stop))
    return random_list

接下來我們就可以用這個函式來生成一個隨機的整數序列了


>>> random_int_list(1,100,10)
[54, 13, 6, 89, 87, 39, 60, 2, 63, 61]

二、使用numpy.random模組來生成隨機陣列


1、np.random.rand 用於生成[0.0, 1.0)之間的隨機浮點數, 當沒有引數時,返回一個隨機浮點數,當有一個引數時,返回該引數長度大小的一維隨機浮點數陣列,引數建議是整數型,因為未來版本的numpy可能不支援非整形引數。


import numpy as np
>>>  np.random.rand(10)
array([ 0.56911206,  0.99777291,  0.18943144,  0.19387287,  0.75090637,
        0.18692814,  0.69804514,  0.48808425,  0.79440667,  0.66959075])

當然該函式還可以用於生成多維陣列,這裡不做詳述。

2、np.random.randn該函式返回一個樣本,具有標準正態分佈。

>>> np.random.randn(10)
array([-1.6765704 ,  0.66361856,  0.04029481,  1.19965741, -0.57514593,
       -0.79603968,  1.52261545, -2.17401814,  0.86671727, -1.17945975])

3、np.random.randint(low[, high, size]) 返回隨機的整數,位於半開區間 [low, high)。


>>> np.random.randint(10,size=10)
array([4, 1, 4, 3, 8, 2, 8, 5, 8, 9])

4、random_integers(low[, high, size]) 返回隨機的整數,位於閉區間 [low, high]。


>>> np.random.random_integers(5)

5、np.random.shuffle(x) 類似洗牌,打亂順序;np.random.permutation(x)返回一個隨機排列


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


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