【3】数据分析-1-数据的处理--numpy--3--随机数random

NumPy的random子库

np.random.*
np.random.rand()
np.random.randn()
np.random.randint()

rand(d0,d1,..,dn) 根据d0‐dn创建随机数数组,浮点数,[0,1),均匀分布
randn(d0,d1,..,dn) 根据d0‐dn创建随机数数组,标准正态分布
randint(low[,high,shape] 据shape创建随机整数或整数数组,范围是[low, high)
seed(s) 随机数种子,s是给定的种子值

shuffle(a) 根据数组a的第1轴进行随排列,改变数组x
permutation(a) 根据数组a的第1轴产生一个新的乱序数组,不改变数组x
choice(a[,size,replace,p]) 从一维数组a中以概率p抽取元素,形成size形状新数组 replace表示是否可以重用元素,默认为False

案例:

    >>> a =np.random.randint(100,200,(3,5))
    >>> a
    array([[152, 180, 139, 184, 123],
                 [187, 199, 160, 187, 184],
                 [127, 182, 131, 123, 161]])

案例2:

n_genes = 3
n_drugs =5
print np.random.randn(n_genes, n_drugs)

[[ 0.0395099   0.33837761 -0.84218319 -0.04963228 -1.23024536]
 [-0.98879267  0.60207459 -0.1595486  -1.28334796 -1.23822008]
 [ 0.7172287  -0.48890867  1.6726215   0.54363772  0.44157299]]

uniform(low,high,size)

产生具有均匀分布的数组,low起始值,high结束值,size形状

normal(loc,scale,size)

产生具有正态分布的数组,loc均值,scale标准差,size形状

poisson(lam,size)

产生具有泊松分布的数组,lam随机事件发生率,size形状

permutation

在机器学习中,如果训练数据之间相关性很大(例如连续的语音分帧),可能会让结果很差(泛化能力得不到训练)。这时通常需要将训练数据打散。

在python中可以使用numpy.random.shuffle(x)的方式打散数据,也就是说将x中得数据按照随机顺序重排。但是这会遇到一个问题:训练集中包括输入x和输出y。x和y在打散前是一一对应的,打散后不能破坏这种对应关系,所以我们可以使用numpy.random.permutation()来帮忙。

numpy.random.permutation(length)用来产生一个随机序列作为索引,再使用这个序列从原来的数据集中按照新的随机顺序产生随机数据集。

indices = numpy.random.permutation(data_x.shape[0]) # shape[0]表示第0轴的长度,通常是训练数据的数量
rand_data_x = data_x[indices]
rand_data_y = data_y[indices] # data_y就是标记(label)

函数shuffle与permutation都是对原来的数组进行重新洗牌(即随机打乱原来的元素顺序);区别在于shuffle直接在原来的数组上进行操作,改变原来数组的顺序,无返回值。而permutation不直接在原来的数组上进行操作,而是返回一个新的打乱顺序的数组,并不改变原来的数组。

a = np.arange(12)
print a
np.random.shuffle(a)
print a
print 
a = np.arange(12)
print a
b = np.random.permutation(a)
print b
print a

输出:

[ 0  1  2  3  4  5  6  7  8  9 10 11]
[11  6  4 10  3  0  7  1  9  2  5  8]

[ 0  1  2  3  4  5  6  7  8  9 10 11]
[10  4  8 11  1  7  6  2  0  9  5  3]
[ 0  1  2  3  4  5  6  7  8  9 10 11]

参考资料

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学