numpy的random
生活随笔
收集整理的這篇文章主要介紹了
numpy的random
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在Python的random中,可以非常方便的生成隨機數,但如果需要生成多種維度的隨機數組或矩陣,那么就需要更好更強大的numpy的random。
一、基本函數
(1)隨機生成包含N個元素的數組
形式:random.random(N) 形式:random.rand(N) 形式:random.ranf(N) 形式:random.sample(N) 形式:random.random_sample(N) import numpy as np print(np.random.random(3)) print(np.random.rand(3)) print(np.random.ranf(3)) print(np.random.sample(3)) print(np.random.random_sample(3)) 輸出結果: [ 0.8557877 0.36745755 0.44609271] [ 0.71871547 0.91454405 0.49529504] [ 0.81503449 0.60967357 0.26630286] [ 0.61978065 0.22269275 0.48401033] [ 0.52780951 0.56578495 0.30356478] random.random,random.rand,random.ranf,random.sample,random.random_sample,這幾個函數是等價的,都是生成0~1之間隨機數的數組,不知道numpy為什么要搞這么多功能一樣的冗余函數,可能是為了兼容以前的版本吧。如果不輸入參數N,則默認生成一個數。注意np.random.sample與標準庫中的random.sample含義完全不一樣。(2)隨機生成包含(M*N)個元素的數組random.random((M*N))
import numpy as np print("random=",np.random.random([3,2])) print("rand=",np.random.rand(3,2)) print("ranf=",np.random.ranf((3,2))) print("sample=",np.random.sample((3,2))) print("random_sample=",np.random.random_sample((3,2))) 輸出結果: random= [[ 0.75084195 0.96951131] [ 0.37772105 0.3978906 ] [ 0.02802572 0.43438696]] rand= [[ 0.72677444 0.8633535 ] [ 0.69032441 0.25305748] [ 0.69106003 0.00194737]] ranf= [[ 0.8468361 0.49833203] [ 0.58263348 0.58513805] [ 0.9306215 0.6438961 ]] sample= [[ 0.64917596 0.49576786] [ 0.29585299 0.21726225] [ 0.0484201 0.86272376]] random_sample= [[ 0.06026404 0.78595412] [ 0.39164591 0.48605263] [ 0.31219578 0.96118488]] 注意:random.rand的輸入參數是一串數,而其他幾個函數輸入參數是一個序列,序列的類型可以是元組,也可以是列表,輸出結果可以形成多維數組。 print(np.random.random([3,2,4,1])) 輸出結果: [[[[ 0.31852145] [ 0.54043198] [ 0.1763678 ]] [[ 0.89952898] [ 0.21197707] [ 0.02113006]]] [[[ 0.01087573] [ 0.86285813] [ 0.96468875]] [[ 0.10674783] [ 0.62386137] [ 0.23828229]]]](3)隨機生成包含N個元素的在[a,b]范圍內的整數的數組
形式:random.randint(a,b,N) 形式:random.random_integers(a,b,N) <span style="font-size:18px;">print(np.random.randint(2,9,3)) print(np.random.random_integers(2,9,3))</span> 輸出結果: [5 6 3] [7 8 3](4)隨機生成包含N個元素的在[a,b]范圍內的浮點數的數組
形式:random.uniform(a,b,N) print(np.random.uniform(2,9,3)) 輸出結果: [ 2.09766702 7.38542663 3.32406193]二、操作序列的函數
(1)從一個序列seq中隨機選取N個元素
形式:random.choice(seq,N) s = [1,2,3,4,5] print(np.random.choice(s)) print(np.random.choice(s,3)) 輸出結果: 5 [2 2 5] 類似于標準庫中random.choice和random.sample2個函數的功能,區別是:一是np.random.choice生成的是數組;二是np.random.choice在序列中隨機選取的位置可能相同;三是np.random.choice中N可以大于seq的size。(2)將一個序列中的元素隨機打亂/重新排列
形式:random.permutation 形式:random.shuffle(seq) s = [1,2,3,4,5] print(np.random.permutation(s)) print(s) t = np.random.shuffle(s) print(t) print(s) 輸出結果: [3 4 5 2 1] [1, 2, 3, 4, 5] None [4, 3, 2, 1, 5] 可以看出,permutation將原序列重新排列后生成一個新序列,原序列不變;shuffle對原序列進行原地重新排列,改變了原序列。三、各種分布的函數
這是numpy.random強大的地方,幾乎所有分布都有相對應的函數,像指數分布、對數分布、泊松分布、gamma、beta等。當然,最常用的仍然是均勻分布和正態分布。各種分布的細節就不介紹了,非常多,用到的時候參考numpy手冊吧。均勻分布有浮點數和整數的均勻分布,就是前面第一節提到的那些函數,最常用。對于正態分布,有三個對應的函數。(1)隨機生成符合標準正態分布的N個元素數組
形式:random.standard_normal(N) print(np.random.standard_normal(3)) 輸出結果: [ 0.53582113 0.38841927 -1.21489776](2)隨機生成均值為u,標準差為o的包含N個元素的數組
形式:random.normal(u,o,N) print(np.random.normal(10,2,3)) 輸出結果: [ 11.26972979 12.70044985 9.22437455]random.normal(0,1,N)等同于random.standard_normal(N)。
(3)隨機生成N組,每組M個元素的符合標準正態分布的數組
形式:random.randn(N,M) print(np.random.randn(5,2)) 輸出結果: [[ 2.3531218 0.34294009] [ 0.39189985 -1.71165367] [ 1.68202598 -1.91222334] [-1.42669599 -0.19984201] [-0.19637414 0.4687705 ]]實際上輸入參數可以很多,形成不同維度的數組。如下例:生成5組,每組2行3列。 print(np.random.randn(5,2,3)) 輸出結果: [[[-0.59553883 0.2567095 1.19788239] [-0.22927001 0.74439248 0.99973737]][[ 0.40198413 -1.5297974 -1.35220548] [-1.12401606 1.55585411 -0.902386 ]][[-0.13046875 0.5698744 1.70325471] [ 0.36825335 0.13363337 -0.72413365]][[ 1.44607607 -0.23438731 1.00991822] [-0.86659134 1.85683232 -1.90688971]][[ 1.7038288 1.76022888 -0.99409035] [ 1.22736843 -0.45617018 -0.11044293]]] 四、總結 除了有些函數名字不同功能卻一樣,顯得有些冗余外,numpy的random比標準庫中的random功能強大很多,且可以兼容python標準庫random中的所有功能,在生成隨機數組/矩陣和各種數學分布時非常實用。
總結
以上是生活随笔為你收集整理的numpy的random的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python的random
- 下一篇: 二项分布均值和方差的简单推导