本博客的目的是试验机器学习中的数据生成过程中所涉及到numpy操作命令. 在此做个记录 <使用过程是用jupyter ,如果谁知道怎么从jupyter直接转成博客,能留言告知那无胜感谢>
#关于Tensorflow 机器学习实战指南 上numpy的主要函数命令的试验,为了能够清晰了解数据的结构和传递 #Tensorflow 和numpy的数据结构可以互相转换 import numpy as np 1. numpy.linspace #首先是np.linspace(开始数值,结束数值,数值个数) valuelinspace=np.linspace(20,29,10) 输出: array([20., 21., 22., 23., 24., 25., 26., 27., 28., 29.])
#可以看出,输出是np格式的arrary([0,1,2,…]),而不是0., 1., 2., 3., 4., 5., 6., 7., 8., 9.] #另外是在0-9之间产生值,即包括0和9 #那么valuelinspace 可索引的.比如. valuelinspace[1] ,输出: 21.0
2. numpy.matrix #下一个是np.matrix(数组), 即把数组转换为矩阵 valuematrix=np.matrix(valuelinspace) 输出: matrix([[20., 21., 22., 23., 24., 25., 26., 27., 28., 29.]])
#可以看到array转换为矩阵,我们看看它的维数,是1X10的1行10列的矩阵 valuematrix.shape (1, 10)
3. Numpy.transpose #np.transpose(矩阵),转矩矩阵 valuetranspose=np.transpose(valuematrix) valuetranspose.shape (10, 1)
输出: matrix([[20.], [21.], [22.], [23.], [24.], [25.], [26.], [27.], [28.], [29.]]) 4.numpy.repeat #np.repeat(重复出现的值,出现的次数),产生相同元素的数组. valuerepeat=np.repeat(12,10) valuerepeat.shape 输出: (10,) repeatmatrix=np.matrix(valuerepeat) 输出: matrix([[12, 12, 12, 12, 12, 12, 12, 12, 12, 12]])
5. numpy.column_stack #np.column_stack((矩阵1,矩阵2),并“列”矩阵 #我们看看valuematrix,valuerepeat stack 之后会产生什么样的反应? #valuematrix:matrix([[0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]]) #repeatmatrix matrix([[12, 12, 12, 12, 12, 12, 12, 12, 12, 12]]) stackrescolumn=np.column_stack((valuematrix,repeatmatrix)) stackrescolumn.shape (1, 20) 输出: matrix([[20., 21., 22., 23., 24., 25., 26., 27., 28., 29., 12., 12., 12., 12., 12., 12., 12., 12., 12., 12.]]) 6. numpy.row_stack #np.row_stack((矩阵1,矩阵2),并“行”矩阵 stackresrow=np.row_stack((valuematrix,repeatmatrix)) stackresrow.shape 输出: (2, 10)
matrix([[20., 21., 22., 23., 24., 25., 26., 27., 28., 29.], [12., 12., 12., 12., 12., 12., 12., 12., 12., 12.]]) 7 .numpy.random.choice #np.random.choice(num,size=get_number) #从num 中随机取出get_number 个数值 #这个和数组一起使用,按照随机生成的顺序取出数组中的数值 valuechoice=np.random.choice(10,size=5) 输出: array([3, 3, 8, 3, 4])
实际应用:
#下面就是按生成随机数取出数值的例子 #在随机批量训练中比较有效 valuex=valuelinspace[valuechoice] 输出: array([23., 23., 28., 23., 24.]) #现在我们看看怎么从整个数据集中分出训练集合测试集 #假设数据集中包含10个样本数据.比如 len(数据集) len=10 temp=range(len) 输出: range(0, 10) #那么每个样本的编号从0到9,作为一个集合{} temp1=set(temp) 输出: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} #现在从总数len随机取5个数据编号,其中5指的是取多少个. #同样这个可以用于batch 批量训练的个数 temp2=np.random.choice(len,5) 输出: array([6, 0, 8, 9, 7]) #转换为集合(即没有重复的值的集合),如果temp2中有相同的值,set 之后只保留1个 temp3=set(temp2) 输出: {0, 6, 7, 8, 9}
#把整体的集合减去被选中的 temp4=temp1-temp3 输出: {1, 2, 3, 4, 5} #载转换为list temp5=list(temp4) 输出: [1, 2, 5, 6, 7, 9] #随机生成10行3列的样本数据 data=np.random.normal(0,1,(10,3)) 输出: array([[ 0.53086915, -1.71762454, 1.10831003], [-0.63743154, 0.02754105, -0.67666506], [ 1.69977584, -0.33969117, 0.89870166], [ 1.24898032, -1.50363802, 0.48186483], [ 0.17043009, 0.66298405, -1.30214859], [-0.3795909 , -0.73323142, 0.54891439], [-2.20966675, -0.64647546, -1.77158127], [ 0.69693956, 0.66329386, -0.71129064], [-0.71508826, -1.05693917, -0.87022322], [-0.50319345, -1.71936687, -0.49348108]])
#先取出其中5个 datasamples1=data[temp2] 输出: array([[-2.20966675, -0.64647546, -1.77158127], [ 0.53086915, -1.71762454, 1.10831003], [-0.71508826, -1.05693917, -0.87022322], [-0.50319345, -1.71936687, -0.49348108], [ 0.69693956, 0.66329386, -0.71129064]])
#再取出剩下的5个 datasamples2=data[temp5] datasamples2 array([[-0.63743154, 0.02754105, -0.67666506], [ 1.69977584, -0.33969117, 0.89870166], [-0.3795909 , -0.73323142, 0.54891439], [-2.20966675, -0.64647546, -1.77158127], [ 0.69693956, 0.66329386, -0.71129064], [-0.50319345, -1.71936687, -0.49348108]])
#从中可以看出 data[list] 可以把按照list中排列的顺序取出样本