天天看點

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]