import numpy as np
# 設置形狀時使用tuple(2, 3)或list[2, 3]都可以
# shape : int or sequence of ints1. rand基本用法numpy.random.rand(d0, d1, …, dn),產生[0,1)之間均勻分布的隨機浮點數,其中d0,d1....表示傳入的數組形狀。
np.random.rand(2) #產生形狀為(2,)的數組,也就是相當於有2個元素的一維數組。
np.random.rand(2,4) #產生一個形狀為(2, 4)的數組,數組中的每個元素是[0,1)之間均勻分布的隨機浮點數。
2. random基本用法numpy.random.random(size),產生[0,1)之間的隨機浮點數,非均勻分布。numpy.random.random_sample、numpy.random.ranf、numpy.random.sample用法與該函數類似。
注意:該函數和rand()的區別:
random()參數只有一個參數「size」,有三種取值,None,int型整數,或者int型元組。而在之前的numpy.random.rand()中可以有多個參數。例如,如果要產生一個3*3的隨機數組(不考慮服從什麼分布),那麼在rand中的寫法是:numpy.random.rand(3,3),而在random中的寫法是numpy.random.random( (3,3) ),這裡面是個元組,是有小括弧的。
random()產生的隨機數的分布非均勻分布,numpy.random.rand()產生的隨機數的分布為均勻分布。
np.random.random((3,3)) ##產生一個[0,1)之間的形狀為(3, 3)的數組。
5 * np.random.random_sample((3, 3)) - 5 # 產生[-5,0)之間的形狀為(3, 3)隨機數組,即5*[0,1)-5。
(10-5) * np.random.random_sample((3, 3)) +5 # 產生[5,10)之間的形狀為(3, 3)隨機數組,即10*[0,1) -5[0,1)+5。
3. numpy.random.uniformuniform(low=0.0, high=1.0, size=None),從指定範圍內產生均勻分布的隨機浮點數。
如果在seed()中傳入的數字相同,那麼接下來生成的隨機數序列都是相同的,僅作用於最接近的那句隨機數產生語句。
np.random.uniform() # 默認產生一個[0,1)之間隨機浮點數。
np.random.uniform(1,5,size=(2 ,4)) # 默認產生一個[1,5)之間的形狀為(2, 4)隨機浮點數。
4. randn基本用法numpy.random.randn(d0, d1, …, dn),產生服從標準正態分布(均值為0,方差為1)的隨機浮點數,使用方法和rand()類似。
np.random.rand(2) #產生形狀為(2,)的數組。
np.random.rand(2,4) #產生一個形狀為(2, 4)的數組。
如果要指定正太分布的均值和方差,則可使用下列公式,sigma * np.random.randn(...) + mu:
2.5 * np.random.randn(2,4)+3 #2.5是標準差(注意2.5不是方差),3是期望。
5. randint基本用法(早期版本random_integers)numpy.random.randint(low[, high, size, dtype]),產生[low, high)之間的隨機整數,如果high不指明,則產生[0, low)之間的隨機整數,size可以是int整數,或者int型的元組,表示產生隨機數的個數,或者隨機數組的形狀。dtype表示具體隨機數的類型,默認是int,可以指定成int64。
早期版本中該函數的形式為numpy.random.random_integers()
np.random.randint(10) #產生一個[0,10)之間的隨機整數。
np.random.randint(10,size=8) #產生[0,10)之間的隨機整數8個,以數組的形式返回。
np.random.randint(5,10,size=(2,4)) #產生[5,10)之間的形狀為(2, 4)的隨機整數8個,以數組的形式返回。
6. choice基本用法numpy.random.choice(a, size=None, replace=True, p=None),從一維array a中按概率p選擇size個數據,若a為int,則從np.arrange(a)中選擇,若a為array,則直接從a中選擇。
np.random.choice(5, 3) # 從np.arrange(5)中等概率選擇3個,等價於np.random.randint(0, 5, 3)
np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0]) # 從np.arrange(5)中按概率p選擇3個,
np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])
np.random.choice(5, 3, replace=False, p=[0.1, 0, 0.3, 0.6, 0])
aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']
np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])
7. numpy.random.shufflenumpy.random.shuffle(x),按x的第一個維度進行打亂, x只能是array
np.random.shuffle( np.arange(9).reshape((3, 3)) ) # 對np.arange(9).reshape((3, 3))打亂。
8. numpy.random.permutationnumpy.random.permutation(x),按x的第一個維度進行打亂,若a為int,則對np.arrange(a)打亂,若a為array,則直接對a進行打亂。
np.random.permutation(10) # 對np.arrange(10)打亂。
np.random.permutation( np.arange(9).reshape((3, 3)) ) # 對np.arange(9).reshape((3, 3))打亂。
9. numpy.random.seed如果在seed()中傳入的數字相同,那麼接下來生成的隨機數序列都是相同的,僅作用於最接近的那句隨機數產生語句。
np.random.seed(10)
temp1=np.random.rand(4) # array([0.77132064, 0.02075195, 0.63364823, 0.74880388])
np.random.seed(10)
temp2=np.random.rand(4) # array([0.77132064, 0.02075195, 0.63364823, 0.74880388])
temp3=np.random.rand(4) # array([0.49850701, 0.22479665, 0.19806286, 0.76053071])
上述temp1和temp2是相同的,temp3是不同的,因為seed僅作用於最接近的那句隨機數產生語句。
10. numpy.linspacenumpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)區間均等分。
np.linspace(2.0, 3.0, num=5) # array([2. , 2.25, 2.5 , 2.75, 3. ])
np.linspace(2.0, 3.0, num=5, endpoint=False) # array([2. , 2.2, 2.4, 2.6, 2.8])
np.linspace(2.0, 3.0, num=5, retstep=True) # (array([2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)
11. zeros()、ones()、empty()、eye()、identity()zeros()、ones()、empty()三者用法一樣,np.zeros(3, dtype=int) np.zeros((2, 3))
使用empty()時需要對生成的每一個數進行重新負值,否則即為隨機數,所以慎重使用。
np.eye(2, 3, k=1)和np.identity(3): np.identity只能創建方形矩陣,np.eye可以創建矩形矩陣,且k值可以調節,為1的對角線的位置偏離度,0居中,1向上偏離1,2偏離2,以此類推,-1向下偏離。值的絕對值過大就偏離出去了,整個矩陣就全是0了。