python下的随机函数总结
实验环境:windows 7,anaconda 3(Python 3.5),tensorflow(gpu/cpu)
函数:
numpy中的随机数:
(0,1)范围:
np.random.random(size),np.random.rand(x1[,x2[,x3[,…]]]),
这两个函数的作用功能相同都是产生(0,1)的数,只是使用方式不同,x1,x2,…指的是python中的0维度,1维度,…
随意范围:
np.random.randint(x1[,x2[,size]]),
如果不指定size则产生一个数,只指定x1产生集合{0,1,…,x1-1}中的一个数,只指定x1,x2产生集合{x1,x1+1,…,x2-1}中的一个数,如果指定了x1,x2,size则产生形状为size的矩阵,矩阵元素取自集合{x1,x1+1,…,x2-1}
np.random.uniform(x1,[x2,[,size]])
如果不指定size则产生一个数,此函数如果只指定x1虽然能产生数但是范围是不定的,所以最好至少指定x1,x2,产生的一个数选自(x1,x2),如果指定了x1,x2,size则产生形状为size的矩阵,矩阵元素选自(x1,x2)
……………………………………………………………………………………我是分割符……………………………………………………………………………………
numpy中的正态分布数:
np.random.normal(loc=0.0,scale=1.0,size)
这个函数用来产生均值为loc,标准差为scale,形状为size的正态分布矩阵,默认值为loc=0.0,scale=1.0
……………………………………………………………………………………我是分割符……………………………………………………………………………………
numpy中的线性数:
np.linspace(x1,x2,n)
np.linspace(x1,x2,n)[:,np.newaxis]
这个函数产生的数列个数是n个,令θ=(x2-x1)/(n-1),则元素选自集合{x1,x1+θ,x1+2θ,…,x1+(n-2)θ,x2},其中[:,np.newaxis]的意思是把一维数组变成二维数组,可加可不加
————————————————————————我是分割符————————————————————————
————————————————————————我是分割符————————————————————————
tensorflow中的随机数:
tf.random_uniform(shape,minval,maxval,dtype)
这个函数可以说整合了numpy的所有随机数函数,只是注意它的形状shape是放在前面,如果dtype是整形则产生形状为shape的矩阵,矩阵元素随机产生自{minval,minval+1,…,maxval-1},如果dytpe是浮点型则产生形状为shape的矩阵,矩阵元素随机产生自区间(minval,maxval)
……………………………………………………………………………………我是分割符……………………………………………………………………………………
tensorflow中的正太分布数:
tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32)
这个函数用来产生正太分布数,特别注意一下这个函数中的dtype是不能更改的,可以缺省
tf.truncated_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32)
功能同上
————————————————————————我是分割符————————————————————————
tensorflow中的随机打乱函数:
tf.random_shuffle(value)
这个函数用于打乱value顺序,注意两点,一如果value是用tensorflow的随机函数产生的值,那经过此函数后得到得新矩阵元素与原矩阵元素可能不等,因为tensorflow的运行机制是先定义图然后在运行,所以运行这个函数的同时也又运行了一遍随机函数自然不等。如果不是用tensorflow的随机函数产生的value则新矩阵元素与原矩阵元素相等,但顺序被打乱了。二是此函数是沿着python的0维度方向进行打乱的。
————————————————————————我是分割符————————————————————————
tensorflow中的切片函数:
tf.slice(input_,begin,size)
此函数之所以放进来说是函数太零散了不好归到其他篇blog。此函数用来切片,input_是输入,begin是开始维度,size是各维度所切大小。举个例子,代码如下:
import tensorflow as tf
y_data = tf.reshape([[[1,2,3],[5,10,5]],[[5,5,3],[4,5,6]],[[1,5,5],[7,8,9]]],shape=[3,2,3])
z_data = tf.slice(input_=y_data,begin=[0,0,1],size=[3,2,1])
with tf.Session() as sess:
print(y_data.eval())
print('********************')
print(z_data.eval())
可以看到y_data是一个shape为[3,2,3]的数据集,在python中可以理解为0维度是3,1维度是2,2维度是3,通俗的讲就是3批2行3列的数据集合, 然后begin为[0,0,1],size为[3,2,1]就是说在0维度方向上从0开始到2也就是切出的是三批,在1维度方向上从0开始到1也就是切出的每一批是两行,在2维度方向上从1开始到1也就是切出的每一批是第二列。