numpy之random学习

在机器学习中参数初始化需要进行随机生成,同时样本也需要随机生成,或者遵从一定规则随机生成,所以对随机生成的使用显得格外重要。

有的是生成随机数,有的是随机序列,有点是从随机序列中选择元素等等。

简单的随机数据


rand(d0, d1, ..., dn)


随机值

>>> np.random.rand(3,2)
array([[ 0.14022471,  0.96360618],  #random
       [ 0.37601032,  0.25528411],  #random
       [ 0.49313049,  0.94909878]]) #random


randn(d0, d1, ..., dn)


返回一个样本,具有标准正态分布。

Notes

For
random samples from , use:

sigma * np.random.randn(...) + mu

Examples

>>> np.random.randn()
2.1923875335537315 #random

Two-by-four
array of samples from N(3, 6.25):

>>> 2.5 * np.random.randn(2, 4) + 3
array([[-4.49401501,  4.00950034, -1.81814867,  7.29718677],  #random
       [ 0.39924804,  4.68456316,  4.99394529,  4.84057254]]) #random


randint(low[, high, size])


返回随机的整数,位于半开区间
[low, high)。

>>> np.random.randint(2, size=10)
array([1, 0, 0, 0, 1, 1, 0, 0, 1, 0])
>>> np.random.randint(1, size=10)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

Generate
a 2 x 4 array of ints between 0 and 4, inclusive:

>>> np.random.randint(5, size=(2, 4))
array([[4, 0, 2, 1],
       [3, 2, 2, 0]])


random_integers(low[, high, size])


返回随机的整数,位于闭区间
[low, high]。

Notes

To
sample from N evenly spaced floating-point numbers between a and b,
use:

a + (b - a) * (np.random.random_integers(N) - 1) / (N - 1.)

Examples

>>> np.random.random_integers(5)
4
>>> type(np.random.random_integers(5))
<type ‘int‘>
>>> np.random.random_integers(5, size=(3.,2.))
array([[5, 4],
       [3, 3],
       [4, 5]])

Choose
five random numbers from the set of five evenly-spaced numbers between 0 and
2.5, inclusive (i.e., from the
set ):

>>> 2.5 * (np.random.random_integers(5, size=(5,)) - 1) / 4.
array([ 0.625,  1.25 ,  0.625,  0.625,  2.5  ])

Roll
two six sided dice 1000 times and sum the results:

>>> d1 = np.random.random_integers(1, 6, 1000)
>>> d2 = np.random.random_integers(1, 6, 1000)
>>> dsums = d1 + d2

Display
results as a histogram:

>>> import matplotlib.pyplot as plt
>>> count, bins, ignored = plt.hist(dsums, 11, normed=True)
>>> plt.show()


random_sample([size])


返回随机的浮点数,在半开区间
[0.0, 1.0)。

To
sample multiply the output ofrandom_sample by (b-a) and
add a:

(b - a) * random_sample() + a

Examples

>>> np.random.random_sample()
0.47108547995356098
>>> type(np.random.random_sample())
<type ‘float‘>
>>> np.random.random_sample((5,))
array([ 0.30220482,  0.86820401,  0.1654503 ,  0.11659149,  0.54323428])

Three-by-two
array of random numbers from [-5, 0):

>>> 5 * np.random.random_sample((3, 2)) - 5
array([[-3.99149989, -0.52338984],
       [-2.99091858, -0.79479508],
       [-1.23204345, -1.75224494]])


random([size])


返回随机的浮点数,在半开区间
[0.0, 1.0)。

(官网例子与random_sample完全一样)


ranf([size])


返回随机的浮点数,在半开区间
[0.0, 1.0)。

(官网例子与random_sample完全一样)


sample([size])


返回随机的浮点数,在半开区间
[0.0, 1.0)。

(官网例子与random_sample完全一样)


choice(a[, size, replace, p])


生成一个随机样本,从一个给定的一维数组

Examples

Generate
a uniform random sample from np.arange(5) of size 3:

>>> np.random.choice(5, 3)
array([0, 3, 4])
>>> #This is equivalent to np.random.randint(0,5,3)

Generate
a non-uniform random sample from np.arange(5) of size 3:

>>> np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])
array([3, 3, 0])

Generate
a uniform random sample from np.arange(5) of size 3 without
replacement:

>>> np.random.choice(5, 3, replace=False)
array([3,1,0])
>>> #This is equivalent to np.random.permutation(np.arange(5))[:3]

Generate
a non-uniform random sample from np.arange(5) of size 3 without
replacement:

>>> np.random.choice(5, 3, replace=False, p=[0.1, 0, 0.3, 0.6, 0])
array([2, 3, 0])

Any
of the above can be repeated with an arbitrary array-like instead of just
integers. For instance:

>>> aa_milne_arr = [‘pooh‘, ‘rabbit‘, ‘piglet‘, ‘Christopher‘]
>>> np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])
array([‘pooh‘, ‘pooh‘, ‘pooh‘, ‘Christopher‘, ‘piglet‘],
      dtype=‘|S11‘)


bytes(length)


返回随机字节。

>>> np.random.bytes(10)
‘ eh\x85\x022SZ\xbf\xa4‘ #random

产生随机数的方式很多种,应用比较广的是

1、rand()、random产生随机的浮点数,但基本在0-1区间内,添加一个参数标注随机序列的size,这个函数的用法和random的一致,两者区别就是一个可以生成二维序列,一个不行。

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

  • rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1
  • dn表格每个维度
  • 返回值为指定维度的array
np.random.rand(4,2)
array([[ 0.02173903,  0.44376568],
       [ 0.25309942,  0.85259262],
       [ 0.56465709,  0.95135013],
       [ 0.14145746,  0.55389458]])
np.random.rand(4,3,2) # shape: 4*3*2
array([[[ 0.08256277,  0.11408276],
        [ 0.11182496,  0.51452019],
        [ 0.09731856,  0.18279204]],

       [[ 0.74637005,  0.76065562],
        [ 0.32060311,  0.69410458],
        [ 0.28890543,  0.68532579]],

       [[ 0.72110169,  0.52517524],
        [ 0.32876607,  0.66632414],
        [ 0.45762399,  0.49176764]],

       [[ 0.73886671,  0.81877121],
        [ 0.03984658,  0.99454548],
        [ 0.18205926,  0.99637823]]])

2、randint(),产生随机整数,特点是可以指定最大值和最小值,返回的是整数。当然也可以指定size,size中每个数都在low和high内。

numpy.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)时间的随机整数
4
np.random.randint(-5,5,size=(2,2))
array([[ 2, -1],
       [ 2,  0]])

3、randn(),其中n表示标准正态分布,这个在生成样本的时候经常使用,需要指定这个序列的尺寸

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

  • randn函数返回一个或一组样本,具有标准正态分布。
  • dn表格每个维度
  • 返回值为指定维度的array
np.random.randn() # 当没有参数时,返回单个数据
-1.1241580894939212
np.random.randn(2,4)
array([[ 0.27795239, -2.57882503,  0.3817649 ,  1.42367345],
       [-1.16724625, -0.22408299,  0.63006614, -0.41714538]])
np.random.randn(4,3,2)
array([[[ 1.27820764,  0.92479163],
        [-0.15151257,  1.3428253 ],
        [-1.30948998,  0.15493686]],

       [[-1.49645411, -0.27724089],
        [ 0.71590275,  0.81377671],
        [-0.71833341,  1.61637676]],

       [[ 0.52486563, -1.7345101 ],
        [ 1.24456943, -0.10902915],
        [ 1.27292735, -0.00926068]],

       [[ 0.88303   ,  0.46116413],
        [ 0.13305507,  2.44968809],
        [-0.73132153, -0.88586716]]])

标准正态分布介绍

  • 标准正态分布—-standard normal distribution
  • 标准正态分布又称为u分布,是以0为均值、以1为标准差的正态分布,记为N(0,1)。

4、choice(),这个函数经常使用,经常在从序列中随机选择元素,而且还是指定选择出元素序列,很是方便。关键是可以为每个元素制定选择的概率。即p

numpy.random.choice(a, size=None, replace=True,
p=None)

  • 从给定的一维数组中生成随机数
  • 参数:
    a为一维数组类似数据或整数;size为数组维度;p为数组中的数据出现的概率
  • a为整数时,对应的一维数组为np.arange(a)
np.random.choice(5,3)
array([4, 1, 4])
np.random.choice(5, 3, replace=False)
# 当replace为False时,生成的随机数不能有重复的数值
array([0, 3, 1])
np.random.choice(5,size=(3,2))
array([[1, 0],
       [4, 2],
       [3, 3]])
demo_list = [‘lenovo‘, ‘sansumg‘,‘moto‘,‘xiaomi‘, ‘iphone‘]
np.random.choice(demo_list,size=(3,3))
array([[‘moto‘, ‘iphone‘, ‘xiaomi‘],
       [‘lenovo‘, ‘xiaomi‘, ‘xiaomi‘],
       [‘xiaomi‘, ‘lenovo‘, ‘iphone‘]],
      dtype=‘<U7‘)
  • 参数p的长度与参数a的长度需要一致;
  • 参数p为概率,p里的数据之和应为1
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‘, ‘sansumg‘, ‘sansumg‘],
       [‘sansumg‘, ‘sansumg‘, ‘sansumg‘],
       [‘sansumg‘, ‘xiaomi‘, ‘iphone‘]],
      dtype=‘<U7‘)

5、sample

lists=[1,2,3,4,5,6,7,8,10]                                  #从指定序列中随机获取指定长度的片断
a=random.sample(lists,3)
print (a)
[8, 6, 10]

排列

shuffle(x)


现场修改序列,改变自身内容。(类似洗牌,打乱顺序)

>>> arr = np.arange(10)
>>> np.random.shuffle(arr)
>>> arr
[1 7 5 2 9 4 3 6 0 8]

This
function only shuffles the array along the first index of a multi-dimensional
array:

>>> arr = np.arange(9).reshape((3, 3))
>>> np.random.shuffle(arr)
>>> arr
array([[3, 4, 5],
       [6, 7, 8],
       [0, 1, 2]])


permutation(x)


返回一个随机排列

>>> np.random.permutation(10)
array([1, 7, 4, 3, 0, 9, 2, 5, 8, 6])
>>> np.random.permutation([1, 4, 9, 12, 15])
array([15,  1,  9,  4, 12])
>>> arr = np.arange(9).reshape((3, 3))
>>> np.random.permutation(arr)
array([[6, 7, 8],
       [0, 1, 2],
       [3, 4, 5]])

上面两者都收用于打乱数组的排序,功能是一样的。

numpy.random.permutation(x):与numpy.random.shuffle(x)函数功能相同,两者区别:peumutation(x)不会修改X的顺序。

因为前者返回了一个副本。

分布


beta(a, b[, size])

贝塔分布样本,在 [0, 1]内。

binomial(n, p[, size])

二项分布的样本。

chisquare(df[, size])

卡方分布样本。

dirichlet(alpha[, size])

狄利克雷分布样本。

exponential([scale, size])

指数分布

f(dfnum, dfden[, size])

F分布样本。

gamma(shape[, scale, size])

伽马分布

geometric(p[, size])

几何分布

gumbel([loc, scale, size])

耿贝尔分布。

hypergeometric(ngood, nbad, nsample[, size])

超几何分布样本。

laplace([loc, scale, size])

拉普拉斯或双指数分布样本

logistic([loc, scale, size])

Logistic分布样本

lognormal([mean, sigma, size])

对数正态分布

logseries(p[, size])

对数级数分布。

multinomial(n, pvals[, size])

多项分布

multivariate_normal(mean, cov[, size])


多元正态分布。

>>> mean = [0,0]
>>> cov = [[1,0],[0,100]] # diagonal covariance, points lie on x or y-axis
>>> import matplotlib.pyplot as plt
>>> x, y = np.random.multivariate_normal(mean, cov, 5000).T
>>> plt.plot(x, y, ‘x‘); plt.axis(‘equal‘); plt.show()


negative_binomial(n, p[, size])

负二项分布

noncentral_chisquare(df, nonc[, size])

非中心卡方分布

noncentral_f(dfnum, dfden, nonc[, size])

非中心F分布

normal([loc, scale, size])


正态(高斯)分布

Notes

The
probability density for the Gaussian distribution is

where is the mean and the standard deviation. The square of the
standard deviation, , is called the variance.

The
function has its peak at the mean, and its “spread” increases with the standard
deviation (the function reaches 0.607 times its maximum at and [R217]).

Examples

Draw
samples from the distribution:

>>> mu, sigma = 0, 0.1 # mean and standard deviation
>>> s = np.random.normal(mu, sigma, 1000)

Verify
the mean and the variance:

>>> abs(mu - np.mean(s)) < 0.01
True
>>> abs(sigma - np.std(s, ddof=1)) < 0.01
True

Display
the histogram of the samples, along with the probability density
function:

>>> import matplotlib.pyplot as plt
>>> count, bins, ignored = plt.hist(s, 30, normed=True)
>>> plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *
...                np.exp( - (bins - mu)**2 / (2 * sigma**2) ),
...          linewidth=2, color=‘r‘)
>>> plt.show()


pareto(a[, size])

帕累托(Lomax)分布

poisson([lam, size])

泊松分布

power(a[, size])

Draws samples in [0, 1] from a power distribution
with positive exponent a - 1.

rayleigh([scale, size])

Rayleigh 分布

standard_cauchy([size])

标准柯西分布

standard_exponential([size])

标准的指数分布

standard_gamma(shape[, size])

标准伽马分布

standard_normal([size])

标准正态分布 (mean=0, stdev=1).

standard_t(df[, size])

Standard Student’s t distribution with df degrees of
freedom.

triangular(left, mode, right[, size])

三角形分布

uniform([low, high, size])

均匀分布

vonmises(mu, kappa[, size])

von Mises分布

wald(mean, scale[, size])

瓦尔德(逆高斯)分布

weibull(a[, size])

Weibull 分布

zipf(a[, size])

齐普夫分布

random的的分布,其实就是随机生成器的完善版,比如:

numpy.random.uniform介绍:
1. 函数原型:  numpy.random.uniform(low,high,size)
功能:从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.
参数介绍:
    low: 采样下界,float类型,默认值为0;
    high: 采样上界,float类型,默认值为1;
    size: 输出样本数目,为int或元组(tuple)类型,例如,size=(m,n,k), 则输出m*n*k个样本,缺省时输出1个值。

2. 类似uniform,还有以下随机数产生函数:
    a. randint: 原型:numpy.random.randint(low, high=None, size=None, dtype=‘l‘),产生随机整数;
    b. random_integers: 原型: numpy.random.random_integers(low, high=None, size=None),在闭区间上产生随机整数;
    c. random_sample: 原型: numpy.random.random_sample(size=None),在[0.0,1.0)上随机采样;
    d. random: 原型: numpy.random.random(size=None),和random_sample一样,是random_sample的别名;
    e. rand: 原型: numpy.random.rand(d0, d1, ..., dn),产生d0 - d1 - ... - dn形状的在[0,1)上均匀分布的float型数。
    f. randn: 原型:numpy.random.randn(d0,d1,...,dn),产生d0 - d1 - ... - dn形状的标准正态分布的float型数

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np  

s = np.random.uniform(0,1,1200)      # 产生1200个[0,1)的数
count, bins, ignored = plt.hist(s, 12, normed=True)
 """
 hist原型:
         matplotlib.pyplot.hist(x, bins=10, range=None, normed=False, weights=None,
         cumulative=False, bottom=None, histtype=‘bar‘, align=‘mid‘,
         orientation=‘vertical‘,rwidth=None, log=False, color=None, label=None,
         stacked=False, hold=None,data=None,**kwargs) 

 输入参数很多,具体查看matplotlib.org,本例中用到3个参数,分别表示:s数据源,bins=12表示bin
 的个数,即画多少条条状图,normed表示是否归一化,每条条状图y坐标为n/(len(x)`dbin),整个条状图积分值为1 

 输出:count表示数组,长度为bins,里面保存的是每个条状图的纵坐标值
      bins:数组,长度为bins+1,里面保存的是所有条状图的横坐标,即边缘位置
      ignored: patches,即附加参数,列表或列表的列表,本例中没有用到。
"""
plt.plot(bins, np.ones_like(bins), linewidth=2, color=‘r‘)
plt.show()

在分布中标准正态分布和正态分布很重要,因为分布状态类似高斯分布,这个在数据样本产生中经常使用。

normal和standnormal,但是这些可以通过randn生成。

随机数生成器

RandomState

Container for the Mersenne Twister pseudo-random
number generator.

seed([seed])

Seed the generator.

get_state()

Return a tuple representing the internal state of the
generator.

set_state(state)

Set the internal state of the generator from a
tuple.

原文地址:https://www.cnblogs.com/polly333/p/8391407.html

时间: 2024-11-13 14:38:54

numpy之random学习的相关文章

为什么你用不好Numpy的random函数?

为什么你用不好Numpy的random函数? 在python数据分析的学习和应用过程中,经常需要用到numpy的随机函数,由于随机函数random的功能比较多,经常会混淆或记不住,下面我们一起来汇总学习下. import numpy as np 1 numpy.random.rand() numpy.random.rand(d0,d1,…,dn) rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1 dn表格每个维度 返回值为指定维度的array np.random.rand(4,

&lt;class &#39;numpy.ndarray&#39;&gt;的学习

在学习opencv-python的时候,给出图片地址再调用cv2.imread("地址"),发现出创建的是numpy类型的ndarray对象,用来存放多维数组的对象 # 导入cv2模块 import cv2 # 给出本地图片的地址 img_dir="D:/360Downloads/test.jpg" # 创建numpy类型的ndarray对象,存放多维数组的对象 img=cv2.imread(img_dir) # <class 'numpy.ndarray'&

NumPy基础入门学习

对于习惯使用了MATLAB的用户而言,学习NumPy这个python工具包付出的成本应该是不大的. NumPy的主要的object是多维数组,是一个有相同类型的数字等构成的一张表格,可以通过元组进行索引.本篇主要列出NumPy中最常用的一些操作. 1,ndarray 类型的一些属性 >>> from numpy import * >>> a=array([[1,2,3],[4,5,6]]) >>> a array([[1, 2, 3], [4, 5,

numpy的random模块

[说明] 翻译自官网的文档. 随机抽样 (numpy.random) 简单的随机数据 rand(d0, d1, ..., dn) 随机值 >>> np.random.rand(3,2) array([[ 0.14022471, 0.96360618], #random [ 0.37601032, 0.25528411], #random [ 0.49313049, 0.94909878]]) #random randn(d0, d1, ..., dn) 返回一个样本,具有标准正态分布.

python标准库-random学习

参考资料:Python 2.7.7 documentation 参考工具:http://translate.google.cn/ random模块学习 一.Bookkeeping functions(几乎没看懂)     random.seed([x]) Initialize the basic random number generator     random.getstate() Return an object capturing the current internal state o

numpy简单入门学习

为了快速的学习numpy,只要参阅了官网的快速入门教程进行学习,官网的网址:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html.虽然和matlab的操作大同小异,但是还是需要很多明确的python的概念,比如序列,列表以及元组的概念,当然这也是python里面需要注意最多的基本的数据类型.现将学习的基本过程叙述如下: numpy是通过python语言实现的用于科学研究中的计算.可以方便的进行代数计算.傅里叶计算等.这是Numpy学习

pyhton numpy库的学习

1.Numpy核心数据结构:ndarray ndarray是由同一种类型的元素组成的N维数组 1.1 ndarray的创建 主要有以下几个函数进行创建: array() zeros():全零数组 ones():全1数组 empty():创建未初始化的数组 1.1.1通过array()创建 (1)一维 a = np.array([1,2,3,4]) (2)二维 b = np.array([     [1,2,3,4],     [5,6,7,8]]) (3)三维 c = np.array([ [

转---Python——numpy random类

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))

Numpy库的学习(一)

今天来学习一下Python库中,支持高级大量的维度数组与矩阵运算的神奇的Numpy库 Numpy同时也对数组运算提供大量的数学函数,对于大量计算运行效率极好 是大量机器学习框架的基础库 废话不多说,直接开整 Numpy中最核心的结构就是ndarray数组 Numpy中定义的最重要的对象是成为ndarray的N维数组类型 它描述相同类型的元素集合.可以使用基于零的索引访问集合中的项目.大部分的数组操作仅仅是修改元数据部分,而不改变其底层的实际数据. 数组的维数称为秩,简单来说就是如果你需要获取数组