1. 程式人生 > >轉---Python——numpy random類

轉---Python——numpy random類

同時 避免 產生 1.2 數據 code random 範圍 and

numpy中利用random類獲取隨機數.

numpy.random.random() 生成隨機浮點數
默認為生成一個隨機的浮點數,範圍是在0.0~1.0之間,也可以通過參數size設置返回數據的size;

生成一個隨機的浮點數:

import numpy
n = numpy.random.random()
print n
1
2
3
輸出:

0.429489486421
1
設置參數size:

import numpy
n = numpy.random.random(size=(3, 2))
print n
1
2
3
輸出:

[[ 0.32018625  0.22410508]
 [ 0.57830333  0.74477335]
 [ 0.08333105  0.48533304]]
1
2
3
numpy.random.randint() 產生隨機整數
API: randint(low, high=None, size=None, dtype=’l’) 
numpy.random.randint()隨機生一個整數int類型,可以指定這個整數的範圍

import numpy as np
print np.random.randint(8)
print np.random.randint(5, size=3)
print np.random.randint(6, size=(3,2))
1
2
3
4
輸出:

4
[1 1 3]
[[2 4]
 [5 4]
 [3 0]]
1
2
3
4
5
指定範圍:

import numpy as np
print np.random.randint(low=5, high=10, size=3)
1
2
輸出:

[7 5 5]
1
numpy.random.normal()  高斯分布隨機數
API: normal(loc=0.0, scale=1.0, size=None) 
loc:均值,scale:標準差,size:抽取樣本的size

import numpy
n = numpy.random.normal(loc=0.0, scale=1, size=(2, 3))
print n
1
2
3
輸出:

[[-0.15040995 -0.43780718 -0.22292445]
 [-0.89388124 -0.39465164  0.24113838]]
1
2
numpy.random.randn() 標準正態分布隨機數
numpy.random.randn(d0, d1, …, dn)函數: 
從標準正態分布中返回一個(d0*d1* …* dn)維樣本值

例1:

import numpy as np
print np.random.randn(4, 2)
1
2
輸出:

[[-1.88753851 -2.54412195]
 [ 0.51856343 -1.07733711]
 [ 1.05820592 -0.23889217]
 [ 0.73309062  0.42152066]]
1
2
3
4
例2:

import numpy as np
print np.random.randn(4, 2, 3)
1
2
輸出:

[[[-1.00477835  1.16919912 -1.28299362]
  [ 0.0645336   0.19143397 -0.16957401]]

 [[-1.45250491 -0.51844037 -0.01241654]
  [ 0.41427599  0.19469926 -0.92450654]]

 [[-1.90133606  1.23554382 -1.37775698]
  [-0.98110245  0.3562373  -0.27816068]]

 [[ 1.0380202   0.24293181  0.5341542 ]
  [-0.62945999  1.62233629 -0.07299065]]]
1
2
3
4
5
6
7
8
9
10
11
numpy.random.rand() 生成[0, 1)間隨機數
numpy.random.rand(d0, d1, …, dn)函數: 
生成一個(d0*d1* …* dn)維位於[0, 1)中隨機樣本

例:

import numpy as np
print np.random.rand(2,3)
1
2
輸出:

[[ 0.06112299  0.02476706  0.04235452]
 [ 0.47891264  0.68831817  0.31309659]]
1
2
numpy.random.shuffle() 隨機打亂序列
numpy.random.shuffle() 將序列的所有元素隨機排序 
<傳入參數可以是一個序列或者元組>

import numpy as np
x = range(0, 8, 1)
print x
np.random.shuffle(x)
print x
1
2
3
4
5
輸出:

[0, 1, 2, 3, 4, 5, 6, 7]

[2, 3, 5, 4, 1, 7, 0, 6]
1
2
3
numpy.random.choice() 隨機選取序列的一個元素
numpy.random.choice()可以從序列(字符串、列表、元組等)中隨機選取,返回一個列表,元組或字符串的隨機項。

import numpy as np
print np.random.choice(['a','b','c','d','e'])
1
2
輸出:

c
1
print np.random.choice(5, 6)
1
輸出(6個小於5的元素):

[2 3 3 3 1 2]
1
p:每個條目出現的概率。如果沒有,假設樣本在A中的所有條目都具有均勻分布。

import numpy as np
print np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])
1
2
(p=[0.1, 0, 0.3, 0.6, 0]即出現0 1 2 3 4的概率分別是[0.1, 0, 0.3, 0.6, 0])

輸出:

[0 3 2]
1
import numpy as np
ss = ['pooh', 'rabbit', 'piglet', 'Christopher']
print np.random.choice(ss, 5, p=[0.5, 0.1, 0.1, 0.3])
1
2
3
輸出:

['Christopher' 'piglet' 'pooh' 'piglet' 'Christopher']
1
numpy.random.binomial() 二項分布采樣
numpy.random.RandomState.binomial(n, p, size=None)表示對一個二項分布進行采樣,s為成功次數 
 P(N)=CsnPs(1?P)n?s
size:采樣的次數,n p即式中的n p;函數的返回值表示n中發生/成功的次數s. 
如:當n=5,p=0.2,size=1000,即5個事件每個發生的概率為0.2,則5個同時發生的概率,采樣size=1000次:

 P(p=0.2)=C55p5(1?p)0=0.32
import numpy as np
print sum(np.random.binomial(5, 0.2, size=10000)==0)/10000.
1
2
可得:

0.3246
1
很接近手動計算結果.

numpy.random.RandomState() 指定種子值
numpy.random.RandomState()指定種子值(指定種子值是為了使同樣的條件下每次產生的隨機數一樣,避免程序調試時由隨機數不同而引起的問題) 
如不設置種子值時,np.random.randint(8)可能產生0-7內的任意整數,且每次產生的數字可能是任意一種. 
而設置種子值後,np.random.RandomState(0).randint(8)可能產生0-7內的任意整數,但種子值不變時每次運行程序產生的數字一樣.

產生隨機整數:

import numpy as np
print np.random.RandomState(0).randint(8)
1
2
輸出:

4
1
生成隨機浮點數:

import numpy
n1 = numpy.random.RandomState(0).random_sample()
n2 = numpy.random.RandomState(0).random_sample(size=(2,3))
print n1,n2
1
2
3
4
輸出:

0.548813503927 
[[ 0.5488135   0.71518937  0.60276338]
 [ 0.54488318  0.4236548   0.64589411]]

轉---Python——numpy random類