python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Numpy随机模块

Numpy的np.random随机模块详解

作者:Clichong

这篇文章主要介绍了Numpy的np.random随机模块详解,平时都会使用到随机模块,一般是torch.random或者是numpy.random,有或者是直接使用ramdom这个python内置的工具包,那么下面就简单记录一下numpy.random常用的函数,需要的朋友可以参考下

1. 随机抽样

import numpy as np
np.random.randn(3,3) # 从标准正太分布中返回样本
np.random.rand(3,3)  # 从0-1均匀分布分布中返回样本
np.random.randint(0, 10, size=(3,3))     # 返回随机的整数,左闭右开区间[)
np.random.random_integers(0, 10, (3,3))  # 返回随机的整数,位于闭区间[]
np.random.random((3,3))          # 返回范围[0., 1.)之间的随机浮点数
np.random.random_sample((3,3))   # 返回范围[0., 1.)之间的随机浮点数
np.random.ranf((3,3))            # 返回范围[0., 1.)之间的随机浮点数
np.random.sample((3,3))          # 返回范围[0., 1.)之间的随机浮点数
# 从[0,5)中挑选3个数,其权重分别为p,其中np.random.choice(5, 3) == np.random.randint(0, 5, 3)
np.random.choice(5, 3, p=[0.1, 0.25, 0.15, 0.4, 0.1])  # 从样本中根据对应的权重返回随机选择索引,权重越大越可能被选择到

2. 随机排序

import numpy as np
np.random.shuffle(arr)  # 随机打乱顺序,直接是内置的,不需要返回
arr = np.random.permutation(arr)   # 随机打乱顺序,需要返回

3. 随机分布

分布函数分布说明
[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])功率分布
[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])标准学生 t 分布
[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])齐普夫分布

4. 随机种子

# 1. RandomState随机种子的使用:numpy.random.RandomState实例对象是线程安全的
from numpy.random import RandomState
r = RandomState(1234567890)
a = r.randint(1, 10,size=10)
r = RandomState(1234567890)
b = r.randint(1, 10, size=10)
r = RandomState(1234567890)
c = r.randint(1, 10, size=10)
r = RandomState(1234567890)
d = r.randint(1, 10, size=10)
a,b,c,d
# 输出:
# (array([3, 7, 4, 2, 5, 1, 7, 5, 1, 8]),
#  array([3, 7, 4, 2, 5, 1, 7, 5, 1, 8]),
#  array([3, 7, 4, 2, 5, 1, 7, 5, 1, 8]),
#  array([3, 7, 4, 2, 5, 1, 7, 5, 1, 8]))
# 分析:由于每次输出前都设置了相同的随机种子,所以程序得到的随机数的值相同
# 2. np.random.seed随机种子的使用:numpy.random.seed()不是线程安全的
# 如果程序中有多个线程最好使用numpy.random.RandomState实例对象来创建或者使用random.seed()来设置相同的随机数种子。
np.random.seed(1234567890)
a = np.random.randint(1, 10, size=10)
np.random.seed(1234567899)
b = np.random.randint(1, 10, size=10)
np.random.seed(1234567890)
c = np.random.randint(1, 10, size=10)
np.random.seed(1234567899)
d = np.random.randint(1, 10, size=10)
a,b,c,d
# 输出:
# (array([3, 7, 4, 2, 5, 1, 7, 5, 1, 8]),
#  array([4, 9, 1, 7, 2, 8, 8, 3, 3, 4]),
#  array([3, 7, 4, 2, 5, 1, 7, 5, 1, 8]),
#  array([4, 9, 1, 7, 2, 8, 8, 3, 3, 4]))
# 分析:由于第一次与第三次输出前设置了相同的随机种子,而第二次与第四次输出前设置了相同的随机种子
# 所以第一次与第三次输出一致,第二次与第四次输出一致。
# 3. ramdom随机种子的使用
import random
random.seed(1234567890)
a = random.sample(range(10),10)  
random.seed(1234567890)
b = random.sample(range(10),10)
c = random.sample(range(10),10)
d = random.sample(range(10),10)
a,b,c,d
# 输出:
# ([9, 2, 7, 1, 4, 8, 5, 0, 6, 3],
#  [9, 2, 7, 1, 4, 8, 5, 0, 6, 3],
#  [6, 2, 0, 5, 8, 9, 4, 1, 7, 3],
#  [2, 7, 3, 8, 6, 1, 4, 9, 0, 5])
# 分析:由于第一次与第二次输出前设置了相同的随机种子,所以输出结果一致;
# 而剩下两次没有设置随机种子,随意两次结果都是随机输出的,分别不同

拓展,在训练开始时,参数的初始化是随机的,为了让每次的结果一致,我们需要设置随机种子。

torch中的随机种子使用如下:

opt.seed = random.randint(1, 10000)
print("Random Seed: ", opt.seed)
torch.manual_seed(args.seed)		# 为CPU设置随机种子
if cuda:
    torch.cuda.manual_seed(seed)	# 为当前GPU设置随机种子
    torch.cuda.manual_seed_all(seed)# 为所有GPU设置随机种子

到此这篇关于Numpy的np.random随机模块详解的文章就介绍到这了,更多相关Numpy随机模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文