之前用R用的顺手了,突然发现python好像更灵活开源,所以最近在学习python,从基础开始学.
以下是numpy模块中数组基本操作,
包括内置的数组创建方法
生成随机数
切片和索引
修改数组形状
组合数组
数组分割
import numpy as np
#内置的数组创建方法
#a = np.array([1,2,3,4,5])
#print('数组内容为:',a)
#print('数组类型为:',a.dtype)
#print('数组的形状为:',a.shape)
#print('数组的维数为:',a.ndim)
#print('数组的长度为:',a.size)
#a = np.random.random(4) #生成随机浮点类型数组
#print(a.dtype)
#a = np.array([[1,2,3,4,5],[6,7,8,9,10]],dtype = complex) #创建复数数组
#print('数组内容为:',a)
#print('数组类型为:',a.dtype)
#a = np.zeros(4) #创建元素均为0的数组,默认为浮点类型,类似还有一个ones()函数
#print('数组a内容为:',a)
#print('数组a类型为:',a.dtype)
#print('数组a形状为:',a.shape)
#print('数组a维数为:',a.ndim)
#print('-------------------')
#b = np.zeros(4,dtype=np.int) #设置类型为整数
#print('数组b内容为:',b)
#print('数组b类型为:',b.dtype)
#print('-------------------')
#c = np.zeros((3,3)) #生成3*3的二维数组
#print('数组c内容为:',c)
#print('数组c形状为:',c.shape)
#print('数组c维数为:',c.ndim)
#a = np.arange(0,10,1) #创建指定范围的一维数组,数值为0-10的数组,步长为1
#print('数组内容为:',a)
#a = np.linspace(0,1,10) #创建数值为0-1的数组,长度为10
#print('数组内容为:\n',a)
#print('数组长度为:',a.size)
#a = np.logspace(0,9,10) #创建数值10的0~9次幂,数组长度为10
#print('数值10的0-9次幂')
#print('数组内容为:\n',a)
#print('数组长度为',a.size)
#print('-----------------')
#b = np.logspace(0,9,10,base=2) #创建数值2的0~9次幂,数组长度为10
#print('数值2的0-9次幂')
#print('数组内容为:\n',b)
#print('数组长度为:',b.size)
#a = np.eye(3) #创建3维数组,对角线元素为1,其余元素为0
#print('数组内容为:\n',a)
#a = np.diag([1,2,3,4,5]) #创建5维数组,指定对角线元素,其余元素维0
#print('数组内容为:\n',a)
#生成随机数
#a = np.random.rand(2,3,2) #创建随机数组,数组的元素取自0~1上的均匀分布,第一个参数是数组个数,第二个参数是数组维度,第三个参数是列数
#print('数组内容为:\n',a)
#print('数组形状为:',a.shape)
#print('数组维数维:',a.ndim)
#a = np.random.randint(2,10,size=(2,2,3)) #创建指定范围内的随机数组,第一个参数为最小值,第二个参数为最大值,无最大值时,取值区间是0~最小值
#size参数为数组的形状,第一个参数是数组个数,第二个参数是维数,第三个参数是列数
#print('数组内容为:\n',a)
#print('数组形状为:',a.shape)
#a = np.random.random(5) #生成一个0~1的浮点型随机数的数组,参数为随机数个数
#b = np.random.random() #默认生成一个随机数
#c = np.random.random((2,3)) #设置数组形状,(维数,列数)
#print('数组a的内容为:\n',a)
#print('数组b的内容为:\n',b)
#print('数组c的内容为:\n',c)
#切片和索引
#a = np.arange(10)
#print('数组a的内容为:',a)
#print('索引为3的结果:',a[3]) #索引从0开始
#print('指定碎银范围与步长的结果:',a[2:5:2]) #打印从索引2开始到索引5停止,步长为2的结果
#print('索引为2以后的结果:',a[2:]) #索引为2之后的结果,包括索引2
#print('索引为5以前的结果:',a[:5]) #索引为5之前的结果,不包括索引5
#print('索引为-2的结果:',a[-2]) #负数表示从后往前索引,即输出索引为倒数第二的结果
#a[1]=2 #修改指定索引的元素值
#print('修改指定索引元素值后的数组为:',a)
#通过索引访问多维数组
#a = np.array([[1,2,3],[4,5,6],[7,8,9]]) #创建多维数组
#print('数组a内容为:\n',a)
#print('指定索引结果:',a[2]) #输出结果为索引为2的元素,索引从0开始,所以结果是最后一行元素
#print('指定索引范围的结果:\n',a[1:]) #打印一行以后的元素,这里索引1就是对应第一行,结果不包括第一行
#print('指定索引范围的结果:\n',a[0:3,:2]) #打印第二列之前的元素,结果包括第二列
#print('指定行列结果:',a[0,1:3]) #打印第一行中第2,3列元素
#print('获取第二列元素:',a[...,1]) #打印第2列所有元素
#print('获取第二行元素:',a[1,...]) #打印第2行所有元素
#print('获取第二列及以后的元素:\n',a[...,1:]) #打印第2列及以后的元素
#修改数组形状
#a = np.arange(9)
#print('原始数组为:',a)
#b = a.reshape((3,3),order='F') #修改数组形状,np.reshape(要修改的数组,新的形状应该兼容原有形状,order='C'按行'F'按列'A'按原顺序'k'按元素在内存中出现的顺序)
#print('修改后数组为:\n',b)
#print('修改后数组维度为:',b.ndim)
#a = np.arange(9).reshape(3,3)
#print('创建的二维数组为:\n',a)
#print('按行展平后的数组:',a.ravel()) #展平数组元素,ravel(order='C'默认按行'F'按列'A'原顺序'k'元素在内存出现的顺序)
#print('按列展平后的数组:',a.ravel(order='F'))
#组合数组
#a = np.array([[1,2],[3,4]])
#print('数组a为:\n',a)
#b = np.array([[5,6],[7,8]])
#print('数组b为:\n',b)
#c = np.hstack((a,b)) #横向堆叠序列中的数组
#d = np.vstack((a,b)) #纵向堆叠序列中的数组
#e = np.hstack((b,a)) #横向堆叠,可以改变序列顺序
#print('横向组合后的数组为:\n',c)
#print('横向组合后的数组为:\n',e)
#print('纵向组合后的数组为:\n',d)
#a = np.array([[1,2],[3,4]])
#print('数组a为:\n',a)
#b = np.array([[5,6],[7,8]])
#print('数组b为:\n',b)
#c = np.concatenate((a,b))
#print('默认组合的数组为:\n',c)
#d = np.concatenate((a,b),axis=1)
#print('组合对应行的数组为:\n',d)
#e = np.concatenate((a,b,[[9,0],[0,9]]),axis=1) #沿着指定轴连接相同形状的多个数组,np.concatanate((a1,a2,a3,...),axis=0/1)默认为0,按列组合
#print('组合多个数组为:\n',e)
#数组分割
#a = np.arange(9).reshape(3,3)
#b = np.hsplit(a,3) #根据形状分割为3个数组,以列的方式对数组进行分割
#print('原数组为:\n',a)
#print('分割后的数组为:\n',b)
#a = np.arange(9).reshape(3,3)
#b = np.vsplit(a,3) #以行的方式进行分割,原数组中每行的数组元素作为一个新的数组
#print('原数组为:\n',a)
#print('分割后的数组为:\n',b)
#a = np.arange(9)
#b = np.split(a,3) #沿着特定的轴将原数组分割为多个数组,np.split(需要被分割的数组,indices_or_sections参数是一个整数时就平均分割数组,
#如果是一个数组,就沿轴分割数组位置,axis=0/1要分割的轴,默认为0)
#c = np.split(a,[1,5,7]) #这里参数数组表示从索引0开始到索引4为一组,从索引5开始到索引6为一组,从索引7开始到最后为一组,负数也可以
#print('原数组为:',a)
#print('平均分割后的数组:',b)
#print('数组分割后的数组:',c)