機器學習生成數據常用Numpy函數介紹(不斷更新中)


在機器學習和深度學習中,經常需要產生一些數據來使用,這時會經常使用numpy的隨機函數,由於隨機函數random的功能比較多,經常會混淆或記不住,下面我們一起來彙總學習下。

1 np.linspace

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
在指定[start, stop]的間隔內返回num個均勻間隔的數組。stop是否被包含在數組裏,使用endpoint=True 或 endpoint=False來決定;retstep是return step縮寫,指定爲True時會返回步長;dtype可以指定或者不指定,不指定情況下,系統自行推斷。例子:

>>> import numpy as np
>>> a = np.linspace(1, 8, 8)
>>> a
Out[26]: array([1., 2., 3., 4., 5., 6., 7., 8.])
>>> a = np.linspace(1, 8, 8, endpoint=False)
>>> a
Out[28]: array([1.   , 1.875, 2.75 , 3.625, 4.5  , 5.375, 6.25 , 7.125])
>>> a, step = np.linspace(1, 8, 8, endpoint=False, retstep=True)
>>> a
Out[30]: array([1.   , 1.875, 2.75 , 3.625, 4.5  , 5.375, 6.25 , 7.125])
>>> step
Out[31]: 0.875
2 np.repeat

numpy.repeat(a, repeats, axis=None)
複製多維數組的每一個元素;axis來控制複製的軸,對於二維數組,就是行和列.
參數的意義:
axis=None,時候就會flatten當前矩陣,實際上就是變成了一個行向量
axis=0, 沿着第1軸複製,實際上增加了行數
axis=1, 沿着第2軸複製,實際上增加列數
repeats 可以爲一個數,也可以爲一個矩陣
例子:利用上述的np.linspace函數產生數據,並使用np.repeat複製

>>> import numpy as np
>>> angles = np.linspace(0, 2 * np.pi, 10, endpoint=False)
>>> angles
Out[33]: 
array([0.        , 0.62831853, 1.25663706, 1.88495559, 2.51327412,
       3.14159265, 3.76991118, 4.39822972, 5.02654825, 5.65486678])
>>> b = angles[..., np.newaxis] # 也可以使用np.reshape(10,1)
>>> c = np.repeat(b, 2, axis=1) # 沿着第2軸複製2個
>>> c
Out[49]: 
array([[0.        , 0.        ],
       [0.62831853, 0.62831853],
       [1.25663706, 1.25663706],
       [1.88495559, 1.88495559],
       [2.51327412, 2.51327412],
       [3.14159265, 3.14159265],
       [3.76991118, 3.76991118],
       [4.39822972, 4.39822972],
       [5.02654825, 5.02654825],
       [5.65486678, 5.65486678]])
>>> c = np.repeat(b, 2, axis=0) # 沿着第1軸複製2個
>>> c
Out[51]: 
array([[0.        ],
       [0.        ],
       [0.62831853],
       [0.62831853],
       [1.25663706],
       [1.25663706],
       [1.88495559],
       [1.88495559],
       [2.51327412],
       [2.51327412],
       [3.14159265],
       [3.14159265],
       [3.76991118],
       [3.76991118],
       [4.39822972],
       [4.39822972],
       [5.02654825],
       [5.02654825],
       [5.65486678],
       [5.65486678]])
3 np.tile

numpy.tile(A, reps) ,按reps的指定複製A裏元素。reps一般是()形式,如(3,1) 意思是沿第1軸複製A,3份,沿第2軸複製A,1份,等於未複製,所以 (3,1) 也可寫成 3
例子:

>>> a = np.array([0, 1, 2])
>>> a.shape
Out[56]: (3,)
>>> print(np.tile(a, 2))
[0 1 2 0 1 2]
>>> print(np.tile(a, 1))
[0 1 2]
>>> print(np.tile(a, 3))
[0 1 2 0 1 2 0 1 2]
>>> print(np.tile(a, (2, 2)))
[[0 1 2 0 1 2]
 [0 1 2 0 1 2]]
>>> mat = np.array([[1,2], [3, 4]]) # 矩陣舉例
>>> print(np.tile(mat, (1, 4))) # 沿第2軸複製4份,複製的是整個矩陣
[[1 2 1 2 1 2 1 2]
 [3 4 3 4 3 4 3 4]]
>>> print(np.tile(mat, (3, 1))) # 沿第1軸複製3份,複製的是整個矩陣
[[1 2]
 [3 4]
 [1 2]
 [3 4]
 [1 2]
 [3 4]]
4 np.random.normal

高斯分佈的概率密度函數
numpy中 numpy.random.normal(loc=0.0, scale=1.0, size=None)
參數的意義爲:
  loc: float類型, 概率分佈的均值,對應着整個分佈的中心center
  scale:float類型,概率分佈的標準差,對應於分佈的寬度,scale越大越矮胖,scale越小,越瘦高
  size:int or tuple of ints,輸出的shape,默認爲None,只輸出一個值
  後續的講的np.random.randn(size)所謂標準正太分佈(μ=0, σ=1),是本函數特例,對應於np.random.normal(loc=0, scale=1, size)
  例子:生成以0爲中心,均方差爲1的100個數

import matplotlib.pyplot as plt
import numpy as np
noise = np.random.normal(0, 1, 100)
plt.plot(noise)
plt.show()

運行結果如下:
圖1-1

5 np.random.seed
  • np.random.seed()的作用:使得隨機數據可預測。
  • 當我們設置相同的seed,每次生成的隨機數相同。如果不設置seed,則每次會生成不同的隨機數.
    如果你調用一個生成隨機數的函數,希望每次調用產生的隨機數都一樣,就需要在調用前先調用一下這個函數。例子:
>>> np.random.seed(0)
>>> np.random.rand(3)
array([0.5488135 , 0.71518937, 0.60276338])
>>> np.random.seed(0)
>>> np.random.rand(3)
array([0.5488135 , 0.71518937, 0.60276338])
6 np.random.rand

np.random.rand(d0,d1,…,dn)

  • rand函數根據給定維度生成**(0,1)**之間的數據,包含0,不包含1
  • dn表格每個維度
  • 返回值爲指定維度的array
>>> np.random.rand(2,3)
array([[0.23375326, 0.2234714 , 0.64232703],
       [0.21824753, 0.1745353 , 0.06373807]])
>>> np.random.rand(2,3,2)
array([[[0.41951721, 0.63004345],
        [0.97280061, 0.79325259],
        [0.70551456, 0.93110322]],

       [[0.43875373, 0.11654689],
        [0.57742884, 0.89260258],
        [0.0328219 , 0.22577848]]])
7 np.random.randn

np.random.randn(d0,d1,…,dn)

  • randn函數返回一個或一組樣本,具有標準正態分佈
  • dn表格每個維度
  • 返回值爲指定維度的array

標準正態分佈

  • 標準正態分佈—-standard normal distribution
  • 標準正態分佈又稱爲u分佈,是以0爲均值、以1爲標準差的正態分佈,記爲N(0,1)。

例子:

>>> >>> np.random.randn()
0.44386323274542566
>>> np.random.randn(2,3)
array([[ 0.33367433,  1.49407907, -0.20515826],
       [ 0.3130677 , -0.85409574, -2.55298982]])
>>> np.random.randn(2,3,3)
array([[[ 0.6536186 ,  0.8644362 , -0.74216502],
        [ 2.26975462, -1.45436567,  0.04575852],
        [-0.18718385,  1.53277921,  1.46935877]],

       [[ 0.15494743,  0.37816252, -0.88778575],
        [-1.98079647, -0.34791215,  0.15634897],
        [ 1.23029068,  1.20237985, -0.38732682]]])
8 np.random.choice

np.random.choice(a, size=None, replace=True, p=None)
從給定的一維數組中生成隨機數
參數:

  • a 爲一維數組類似數據或整數;a爲整數時,對應的一維數組爲np.arange(a)
  • size 爲數組維度;
  • p爲數組中的數據出現的概率,p與a具有相同shape,並且裏面的數據之和爲1,每個值代表對應的a中元素出現的概率。

從已知的多維數組中抽取一定形狀的數據會用到,replace爲False時,抽出的數據不能有重複值。例子:

>>> np.random.choice(5,3)
array([3, 4, 1])
>>> np.random.choice(5, 3, replace=False)
array([1, 4, 3])
>>> np.random.choice(5,size=(3,2))
array([[4, 4],
       [3, 4],
       [4, 4]])
>>> demo_list = ['lenovo', 'sansumg','moto','xiaomi', 'iphone']
>>> np.random.choice(demo_list,size=(3,3))
array([['lenovo', 'iphone', 'xiaomi'],
       ['moto', 'lenovo', 'sansumg'],
       ['sansumg', 'xiaomi', 'lenovo']], dtype='<U7')
>>> demo_list = ['lenovo', 'sansumg','moto','xiaomi', 'iphone']
>>> np.random.choice(demo_list,size=(3,3), p=[0.1,0.6,0.1,0.1,0.1])
array([['sansumg', 'lenovo', 'sansumg'],
       ['sansumg', 'iphone', 'xiaomi'],
       ['sansumg', 'lenovo', 'sansumg']], dtype='<U7')
9 np.random.random_sample 和 np.random.ranf

生成[0,1]之間的浮點數

  • numpy.random.random_sample(size=None)
  • numpy.random.random(size=None)
  • numpy.random.ranf(size=None)
  • numpy.random.sample(size=None)

例子:

>>> print(np.random.random_sample(size=(2,2)))
[[0.01998767 0.44171092]
 [0.97958673 0.35944446]]
>>> print(np.random.random(size=(2,2)))
[[0.48089353 0.68866118]
 [0.88047589 0.91823547]]
>>> print(np.random.ranf(size=(2,2)))
[[0.21682214 0.56518887]
 [0.86510256 0.50896896]]
>>> print(np.random.sample(size=(2,2)))
[[0.91672295 0.92115761]
 [0.08311249 0.27771856]]
10 np.random.randint

np.random.randint(low, high=None, size=None, dtype=’l’)

  • 返回隨機整數,範圍區間爲[low,high),包含low,不包含high
  • 參數:low爲最小值,high爲最大值,size爲數組維度大小,dtype爲數據類型,默認的數據類型是np.int
  • high沒有填寫時,默認生成隨機數的範圍是[0,low)
    例子:
>>> np.random.randint(1,size=5) # 返回[0,1)之間的整數,所以只有0
array([0, 0, 0, 0, 0])
>>> np.random.randint(1,5) # 返回1個[1,5)之間的隨機整數
1
>>> np.random.randint(-5,5,size=(2,2))
array([[-3, -2],
       [-5, -5]])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章