机器学习生成数据常用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]])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章