Python——随机数生成模块numpy.random

    xiaoxiao2024-10-21  86

    本文转载自:https://blog.csdn.net/jinxiaonian11/article/details/53143141


    在数据分析中,数据的获取是第一步,numpy.random 模块提供了非常全的自动产生数据API,是学习数据分析的第一步。  总体来说,numpy.random模块分为四个部分,对应四种功能: 

    简单随机数: 产生简单的随机数据,可以是任何维度 排列:将所给对象随机排列 分布:产生指定分布的数据,如高斯分布等 生成器:种随机数种子,根据同一种子产生的随机数是相同的

    以下代码默认已导入numpy: 

    import numpy as np

     


    1. 生成器

    电脑产生随机数需要明白以下几点: 

     

    随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就不会变。 只要用户不设置随机种子,那么在默认情况下随机种子来自系统时钟(即定时/计数器的值) 随机数产生的算法与系统有关,Windows和Linux是不同的,也就是说,即便是随机种子一样,不同系统产生的随机数也不一样。 

    numpy.random 设置种子的方法有:

    函数名称函数功能参数说明RandomState定义种子类RandomState是一个种子类,提供了各种种子方法,最常用seedseed([seed])定义全局种子参数为整数或者矩阵

     

    代码示例:

    np.random.seed(1234) #设置随机种子为1234

    2. 简单随机数

    函数名称函数功能参数说明rand(d0, d1, …, dn)产生均匀分布的随机数dn为第n维数据的维度randn(d0, d1, …, dn)产生标准正态分布随机数dn为第n维数据的维度randint(low[, high, size, dtype])产生随机整数low:最小值;high:最大值;size:数据个数random_sample([size])在[0,1)内产生随机数size:随机数的shape,可以为元祖或者列表,[2,3]表示2维随机数,维度为(2,3)random([size])同random_sample([size])同random_sample([size])ranf([size])同random_sample([size])同random_sample([size])sample([size]))同random_sample([size])同random_sample([size])choice(a[, size, replace, p])从a中随机选择指定数据a:1维数组 size:返回数据形状bytes(length)返回随机位length:位的长度

     

    (1) np.random.rand(2,3) #产生2行三列均匀分布随机数组 Out[7]: array([[ 0.35369993, 0.0086019 , 0.52609906], [ 0.31978928, 0.27069309, 0.21930115]]) (2)In [8]: np.random.randn(3,3) #三行三列正态分布随机数据 Out[8]: array([[ 2.29864491, 0.52591291, -0.80812825], [ 0.37035029, -0.07191693, -0.76625886], [-1.264493 , 1.12006474, -0.45698648]]) (3)In [9]: np.random.randint(1,100,[5,5]) #(1,100)以内的5行5列随机整数 Out[9]: array([[87, 69, 3, 86, 85], [13, 49, 59, 7, 31], [19, 96, 70, 10, 71], [91, 10, 52, 38, 49], [ 8, 21, 55, 96, 34]]) (4)In [10]: np.random.random(10) #(0,1)以内10个随机浮点数 Out[10]: array([ 0.33846136, 0.06517708, 0.41138166, 0.34638839, 0.41977818, 0.37188863, 0.2508949 , 0.89923638, 0.51341298, 0.71233872]) (5)In [11]: np.random.choice(10) #[0,10)内随机选择一个数 Out[11]: 7

    3. 分布

    numpy.random模块提供了产生各种分布随机数的API:

    函数名称函数功能参数说明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])多元正态分布。 negative_binomial(n, p[, size])负二项分布 noncentral_chisquare(df, nonc[, size])非中心卡方分布 noncentral_f(dfnum, dfden, nonc[, size])非中心F分布 normal([loc, scale, size])正态(高斯)分布 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])齐普夫分布

     

    (1)正态分布 import numpy as np import matplotlib.pyplot as plt mu = 1 #期望为1 sigma = 3 #标准差为3 num = 10000 #个数为10000 rand_data = np.random.normal(mu, sigma, num) count, bins, ignored = plt.hist(rand_data, 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()

    得到图像: 


    4. 排列

    函数名称函数功能参数说明shuffle(x)打乱对象x(多维矩阵按照第一维打乱)矩阵或者列表permutation(x)打乱并返回该对象(多维矩阵按照第一维打乱)整数或者矩阵

     

    (1)正态分布 import numpy as np rand_data = np.random.randint(1, 10, (3, 4)) print(rand_data) np.random.shuffle(rand_data) print(rand_data) out: [[4 4 4 8] [5 6 8 2] [1 7 6 6]] [[4 4 4 8] [1 7 6 6] [5 6 8 2]] #按照行打乱了,也就是交换了行

     

    最新回复(0)