numpy基础数据结构 numpy数组是一个多维数组对象,称为ndarray。其有两部分组成:
实际的数据
描述这些数据的元数据
多维数据ndarray 在使用这个属性方法之前,需要先导入numpy包import numpy as np
1 2 3 4 5 6 7 8 ar = np.array([1 , 2 , 3 , 4 ]) print(ar) print(ar.ndim) print(ar.shape) print(ar.size) print(ar.dtype) print(ar.itemsize) print(ar.data)
数组的基本属性 ① 数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推 ② 在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量: 比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组所以一维数组就是NumPy中的轴(axes),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。
创建数组 array()函数 括号内可以是列表、元组、数组、生成器等
1 2 3 4 ar1 = np.array(range(10 )) ar2 = np.array([1 ,2 ,3.14 ,4 ,5 ]) ar3 = np.array([[1 ,2 ,3 ],('a' ,'b' ,'c' )]) ar4 = np.array([[1 ,2 ,3 ],('a' ,'b' ,'c' ,'d' )])
arange()函数 类似于range(),在给定间隔内返回均匀间隔的值
1 2 3 4 5 print(np.arange(10 )) print(np.arange(10.0 )) print(np.arange(5 ,12 )) print(np.arange(5.0 ,12 ,2 )) print(np.arange(10000 ))
linspace():num个均匀的样本 1 2 3 ar1 = np.linspace(2.0 , 3.0 , num=5 ) ar2 = np.linspace(2.0 , 3.0 , num=5 , endpoint=False ) ar3 = np.linspace(2.0 , 3.0 , num=5 , retstep=True )
numpy.linspace(start,stop,num=50,endpoint=True,retstep=False, dtype=None) start:起始值,stop:结束值 num:生成样本数,默认为50 endpoint:如果为真,则停止是最后一个样本。否则,不包括在内。默认值为True。 retstep:如果为真,返回(样本,步骤),其中步长是样本之间的间距 → 输出为一个包含2个元素的元祖,第一个元素为array,第二个为步长实际值
创建数组:zeros()/zeros_like()/ones()/ones_like() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ar1 = np.zeros(5 ) ar2 = np.zeros((2 ,2 ), dtype = np.int) ar3 = np.array([list(range(5 )),list(range(5 ,10 ))]) ar4 = np.zeros_like(ar3) ar5 = np.ones(9 ) ar6 = np.ones((2 ,3 ,4 )) ar7 = np.ones_like(ar3)
创建数组:eye() 创建一个正方的N*N的单位矩阵,对角线值为1,其余为0print(np.eye(5))
numpy通用函数 数组形状:.T/.reshape()/.resize() .T方法:转置,例如原shape为(3,4)/(2,3,4),转置结果为(4,3)/(4,3,2) → 所以一维数组转置后结果不变
1 2 3 ar3 = ar1.reshape(2 ,5 ) ar4 = np.zeros((4 ,6 )).reshape(3 ,8 ) ar5 = np.reshape(np.arange(12 ),(3 ,4 ))
numpy.reshape(a, newshape, order=’C’):为数组提供新形状,而不更改其数据,所以元素数量需要一致!!
numpy.resize(a, new_shape):返回具有指定形状的新数组,如有必要可重复填充所需数量的元素。注意了:.T/.reshape()/.resize()都是生成新的数组!!!
数组的复制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ar1 = np.arange(10 ) ar2 = ar1 print(ar2 is ar1) ar1[2 ] = 9 print(ar1,ar2) ar3 = ar1.copy() print(ar3 is ar1) ar1[0 ] = 9 print(ar1,ar3)
数组类型转换:.astype() 1 2 3 4 5 6 7 8 9 10 ar1 = np.arange(10 ,dtype=float) print(ar1,ar1.dtype) print('-----' ) ar2 = ar1.astype(np.int32) print(ar2,ar2.dtype) print(ar1,ar1.dtype)
数组堆叠 numpy.hstack(tup):水平(按列顺序)堆叠数组
1 2 3 4 5 6 7 8 9 10 11 12 a = np.arange(5 ) b = np.arange(5 ,9 ) ar1 = np.hstack((a,b)) print(a,a.shape) print(b,b.shape) print(ar1,ar1.shape) a = np.array([[1 ],[2 ],[3 ]]) b = np.array([['a' ],['b' ],['c' ]]) ar2 = np.hstack((a,b)) print(a,a.shape) print(b,b.shape) print(ar2,ar2.shape)
numpy.vstack(tup):垂直(按列顺序)堆叠数组
1 2 3 4 5 6 7 8 9 10 11 12 a = np.arange(5 ) b = np.arange(5 ,10 ) ar1 = np.vstack((a,b)) print(a,a.shape) print(b,b.shape) print(ar1,ar1.shape) a = np.array([[1 ],[2 ],[3 ]]) b = np.array([['a' ],['b' ],['c' ],['d' ]]) ar2 = np.vstack((a,b)) print(a,a.shape) print(b,b.shape) print(ar2,ar2.shape)
numpy.stack(arrays, axis=0):沿着新轴连接数组的序列,形状必须一样! 重点解释axis参数的意思,假设两个数组[1 2 3]和[4 5 6],shape均为(3,0) axis=0:[[1 2 3] [4 5 6]],shape为(2,3) axis=1:[[1 4] [2 5] [3 6]],shape为(3,2)
1 2 3 4 5 6 7 8 a = np.arange(5 ) b = np.arange(5 ,10 ) ar1 = np.stack((a,b)) ar2 = np.stack((a,b),axis = 1 ) print(a,a.shape) print(b,b.shape) print(ar1,ar1.shape) print(ar2,ar2.shape)
数组拆分 numpy.hsplit(ary, indices_or_sections):将数组水平(逐列)拆分为多个子数组 → 按列拆分 输出结果为列表,列表中元素为数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ar = np.arange(16 ).reshape(4 ,4 ) ar1 = np.hsplit(ar,2 ) print(ar) print(ar1,type(ar1)) [[ 0 1 2 3 ] [ 4 5 6 7 ] [ 8 9 10 11 ] [12 13 14 15 ]] [array([[ 0 , 1 ], [ 4 , 5 ], [ 8 , 9 ], [12 , 13 ]]), array([[ 2 , 3 ], [ 6 , 7 ], [10 , 11 ], [14 , 15 ]])]
numpy.vsplit(ary, indices_or_sections)::将数组垂直(行方向)拆分为多个子数组 → 按行拆
1 2 ar2 = np.vsplit(ar,4 ) print(ar2,type(ar2))
数组简单运算 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ar = np.arange(6 ).reshape(2 ,3 ) print(ar + 10 ) print(ar * 2 ) print(1 / (ar+1 )) print(ar ** 0.5 ) print(ar.mean()) print(ar.max()) print(ar.min()) print(ar.std()) print(ar.var()) print(ar.sum(), np.sum(ar,axis = 0 )) print(np.sort(np.array([1 ,4 ,3 ,2 ,5 ,6 ])))
numpy索引及切片 核心:基本索引及切片、布尔型索引及切片
基本索引及切片 一维数组索引及切片 1 2 3 4 ar = np.arange(20 ) print(ar) print(ar[4 ]) print(ar[3 :6 ])
二维数组及切片 1 2 3 4 5 6 7 ar = np.arange(16 ).reshape(4 ,4 ) print(ar, '数组轴数为%i' %ar.ndim) print(ar[2 ], '数组轴数为%i' %ar[2 ].ndim) print(ar[2 ][1 ]) print(ar[1 :3 ], '数组轴数为%i' %ar[1 :3 ].ndim) print(ar[2 ,2 ]) print(ar[:2 ,1 :])
三维数组及切片 1 2 3 4 5 ar = np.arange(8 ).reshape(2 ,2 ,2 ) print(ar, '数组轴数为%i' %ar.ndim) print(ar[0 ], '数组轴数为%i' %ar[0 ].ndim) print(ar[0 ][0 ], '数组轴数为%i' %ar[0 ][0 ].ndim) print(ar[0 ][0 ][1 ], '数组轴数为%i' %ar[0 ][0 ][1 ].ndim)
布尔型索引及切片 布尔型索引:以布尔型的矩阵去做筛选
1 2 3 4 5 6 7 8 ar = np.arange(12 ).reshape(3 ,4 ) i = np.array([True ,False ,True ]) j = np.array([True ,True ,False ,False ]) print(ar) print(i) print(j) print(ar[i,:]) print(ar[:,j])
1 2 3 m = ar > 5 print(m) print(ar[m])
数组索引及切片的值更改、复制
1 2 3 4 5 6 ar = np.arange(10 ) print(ar) ar[5 ] = 100 ar[7 :9 ] = 200 print(ar)
复制
1 2 3 4 5 ar = np.arange(10 ) b = ar.copy() b[7 :9 ] = 200 print(ar) print(b)
numpy随机数 numpy.random包含多种概率分布的随机样本,是数据分析辅助的重点工具之一
随机数生成
1 2 3 samples = np.random.normal(size=(4 ,4 )) print(samples)
numpy.random.rand(d0, d1, …, dn):生成一个[0,1)之间的随机浮点数或N维浮点数组 —— 均匀分布
1 2 3 4 5 6 7 8 9 10 11 a = np.random.rand() print(a,type(a)) b = np.random.rand(4 ) print(b,type(b)) c = np.random.rand(2 ,3 ) print(c,type(c)) samples1 = np.random.rand(1000 ) samples2 = np.random.rand(1000 )
numpy.random.randint(low, high=None, size=None, dtype=’l’):生成一个整数或N维整数数组 若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数,且high必须大于low dtype参数:只能是int类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 print(np.random.randint(2 )) print(np.random.randint(2 ,size=5 )) print(np.random.randint(2 ,6 ,size=5 )) print(np.random.randint(2 ,size=(2 ,3 ))) print(np.random.randint(2 ,6 ,(2 ,3 )))
存储数组数据.npy文件 1 2 3 4 5 6 7 import osos.chdir('C:/Users/Hjx/Desktop/' ) ar = np.random.rand(5 ,5 ) print(ar) np.save('arraydata.npy' , ar)
读取.npy文件
1 2 3 ar_load =np.load('arraydata.npy' ) print(ar_load)
存储、读取文本文件
1 2 3 4 5 6 7 ar = np.random.rand(5 ,5 ) np.savetxt('array.txt' ,ar, delimiter=',' ) ar_loadtxt = np.loadtxt('array.txt' , delimiter=',' ) print(ar_loadtxt)
转载请注明来源,欢迎指出任何有错误或不够清晰的表达。可以邮件至gxnucgb@qq.com