需要完整PPT和代码文件请点赞关注收藏后评论区留言~~~
Numpy 是一个开源的Python 科学计算库,它是python 科学计算库的基础库,许多其他著名的库(如Pandas、 Scikit-learn 等)都要用到Numpy库的一些功能。Numpy常用的导入格式:import numpy as np
一、创建数组对象
NumPy库能将数据(列表、元组、数组或其他序列类型)转换为ndarray数组。
利用array函数创建数组对象
专门创建数组的函数
利用array()创建数组对象
import numpy as np data1 = [1,3,5,7] #列表 w1 = np.array(data1) print('w1:',w1) data2 = (2,4,6,8) #元组 w2 = np.array(data2) print('w2:',w2) data3 = [[1,2,3,4],[5,6,7,8]] #多维数组 w3 = np.array(data3) print('w3:',w3)
专门创建数组的函数
利用arange函数创建数组
array1 = np.arange(10) print('array1:',array1) array2 = np.arange(0,1,0.2) print('array2:',array2)
利用linspace和logspace函数创建数组
logspace函数创造出来的是等比数列
array3= np.linspace(0,1,5) array4 = np.logspace(0,1,5) #生成1-10间的具有5个元素的等比数列 print('array3:',array3) print('array4:',array4)
zeros和ones函数用来创建指定长度或形状的全0或全1数组
print('1维值为0的数组:',np.zeros(4)) print('3*3维值为0的数组:\n',np.zeros([3,3])) print('1维值为0的数组:',np.ones(5)) print('2*3维值为0的数组:\n',np.ones([2,3]))
diag函数创建类似对角矩阵,即对角线元素为0或者指定值,其他元素为0,full函数根据shape生成一个值全为val的矩阵
print('对角阵:\n',np.diag([1,2,3,4])) print('指定大小和数值的矩阵:\n',np.full((2,3),6))
NumPy创建的ndarray对象属性,主要有shape、size等属性
查看数组的属性、设置shape属性及类型转换
warray = np.array([[1,2,3],[4,5,6]]) print('秩为:',warray.ndim) print('形状为:',warray.shape) print('元素个数为:',warray.size) warray.shape = 3,2 print('设置shape后的数组:\n',warray) print('原数组类型:',warray.dtype) print('新数据类型',warray.astype(np.float64).dtype)
生成随机数
在NumPy.random模块中,提供了多种随机数的生成函数。如randint生成指定范围的随机整数。
用法:np.random.randint(low,high = None,size = None)
arr1 = np.random.randint(100,200,size = (2,4)) print('arr1:\n',arr1) arr2 = np.random.rand(5) print('arr2:\n',arr2) arr3 = np.random.rand(3,2) print('arr3:\n',arr3)
常用随机数生成函数如下
二、数组变换
数组重塑
reshape ,与reshape相反的方法是数据散开(ravel)或数据扁平化(flatten)
arr1 = np.arange(12) print('arr1:\n',arr1) arr2=arr1.reshape(3,4) print('arr2:\n',arr2) arr3 = arr1.reshape(2,-1) print('arr3:\n',arr3)
数据的散开与扁平化
arr1 = np.arange(12).reshape(3,4) print('arr1:\n',arr1) arr2 = arr1.ravel() print('arr2:',arr2) arr3 = arr1.flatten() print('arr3:',arr3)
数组合并
完成数组的组合,包括数组的横向组合和纵向组合。NumPy利用hstack、vstack和concatenate函数完成数组的组合。横向组合利用hstack函数。纵向组合是利用vstack。concatenate函数可以实现数组的横向或纵向合并,参数axis = 1时进行横向合并,axis = 0时进行纵向合并。
arr1 = np.arange(6).reshape(3,2) arr2 = arr1*2 arr3 = np.hstack((arr1,arr2)) print('横向合并:\n',arr3) arr4 = np.vstack((arr1,arr2)) print('纵向合并:\n',arr4) arr1 = np.arange(6).reshape(3,2) arr2 = arr1*2 print('横向组合为:\n',np.concatenate((arr1,arr2),axis = 1)) print('纵向组合为:\n',np.concatenate((arr1,arr2),axis = 0))
数组分割
与数组合并相反,NumPy提供了hsplit、vsplit和split分别实现数组的横向、纵向和指定方向的分割。
arr = np.arange(16).reshape(4,4) print('横向分割为:\n',np.hsplit(arr,2)) print('纵向组合为:\n',np.vsplit(arr,2))
数组转置和轴对换
数组转置是数组重塑的一种特殊形式,可以通过transpose方法进行转置。transpose方法需要传入轴编号组成的元组。
arr = np.arange(6).reshape(3,2) print('矩阵:\n',arr) print('转置矩阵:\n',arr.transpose((1,0)))
三、数组的索引和切片
一维数组的索引和切片 一维数组的切片和索引与python 的list 索引类似
arr = np.arange(10) print(arr) print(arr[2]) print(arr[-1]) print(arr[1:4]) arr1 = arr[-4:-1].copy() print(arr) print(arr1)
多维数组的索引 对于多维数组,它的每一个维度都有一个索引,各个维度的索引之间用逗号分隔。也可以使用整数函数和布尔值索引访问多维数组。
import numpy as np arr = np.arange(12).reshape(3,4) print(arr) print(arr[0,1:3]) #索引第0行中第1列到第2列的元素 print(arr[:,2]) #索引第2列元素 print('索引结果1:',arr[(0,1),(1,3)]) #索引第1、2行中第0、2、3列的元素 print('索引结果2:',arr[1:2,(0,2,3)]) mask = np.array([1,0,1],dtype = np.bool) #mask是一个布尔数组,它索引第0,2行中第1列元素 print('索引结果3:',arr[mask,1])
四、数组的运算
数组的运算支持向量化运算,将本来需要在Python级别进行的运算,放到C语言的运算中,明显地提高了程序的运算速度。
1. 数组和标量间的运算
a = [1,2,3] b = [] for i in a: b.append(i*i) print('b数组:',b) wy = np.array([1,2,3]) c = wy*2 print('c数组:',c)
2. ufunc函数
常用的ufunc函数运算有四则运算、比较运算和逻辑运算。 np.any函数表示逻辑“or”,np.all函数表示逻辑“and”。
x = np.array([1,2,3]) y = np.array([4,5,6]) print('数组相加结果:',x+y) print('数组相减结果:',x-y) print('数组相乘结果:',x*y) print('数组幂运算结果:',x**y)
ufunc函数也可以进行比较运算 返回的结果是一个布尔数组 其中每个元素都是对应元素的比较结果
x = np.array([1,3,6]) y = np.array([2,3,4]) print('比较结果(<):',x<y) print('比较结果(>):',x>y) print('比较结果(==):',x==y) print('比较结果(>=):',x>=y) print('比较结果(!=):',x!=y)
ufunc函数的广播机制
广播(broadcasting)是指不同形状的数组之间执行算术运算的方式。
arr1 = np.array([[0,0,0],[1,1,1],[2,2,2]]) arr2 = np.array([1,2,3]) print('arr1:\n',arr1) print('arr2:\n',arr2) print('arr1+arr2:\n',arr1+arr2)
条件逻辑运算
在NumPy中可以利用基本的逻辑运算就可以实现数组的条件运算。
arr1 = np.array([1,3,5,7]) arr2 = np.array([2,4,6,8]) cond = np.array([True,False,True,False]) result = [(x if c else y)for x,y,c in zip(arr1,arr2,cond)] print(result)
这种方法对大规模数组处理效率不高,也无法用于多维数组。NumPy提供的where方法可以解决这些问题。 where的用法:np.where(condition, x, y) 满足条件(condition),输出x,不满足则输出y。
print(np.where([[True,False], [True,True]],[[1,2], [3,4]],[[9,8], [7,6]])) w = np.array([2,5,6,3,10]) print(np.where(w>4))
五、NumPy中的数据统计与分析
1. 排序 numpy.sort(a, axis, kind, order)
使用argsort和lexsort函数,可以在给定一个或多个键时,得到一个由整数构成的索引数组,索引值表示数据在新的序列中的位置。
arr = np.array([7,9,5,2,9,4,3,1,4,3]) print('原数组:',arr) arr.sort() print('排序后:',arr) arr = np.array([[4,2,9,5],[6,4,8,3],[1,6,2,4]]) print('原数组:\n',arr) arr.sort(axis = 1) #沿横向排序 print('横向排序后:\n',arr) arr = np.array([7,9,5,2,9,4,3,1,4,3]) print('原数组:',arr) print('排序后:',arr.argsort()) #返回值为数组排序后的下标排列 a=[2,5,8,4,3,7,6] b=[9,4,0,4,0,2,1] c=np.lexsort((a,b)) print(c)
2. 重复数据与去重
在数据统计分析中,需要提前将重复数据剔除。在NumPy中,可以通过unique函数找到数组中的唯一值并返回已排序的结果。
names = np.array(['红色','蓝色','黄色','白色','红色']) print('原数组:',names) print('去重后的数组:',np.unique(names))
3:数据重复
统计分析中有时需要把一个数据重复若干次 在Numpy中主要使用tile和repeat函数实现数据重复
arr = np.arange(5) print('原数组:',arr) wy = np.tile(arr,3) print('重复数据处理:\n',wy) import numpy as np arr1 = np.arange(5) print('原数组:',arr1) w1 = np.tile(arr1,3) print('原数组重复3次:\n',np.tile(arr1,3)) arr2 = np.array([[1,2,3],[4,5,6]]) print('重复数据处理:\n',arr2.repeat(2,axis=0))
3.常用统计函数
NumPy中提供了很多用于统计分析的函数,常见的有sum、mean、std、var、min和max等。几乎所有的统计函数在针对二维数组的时候需要注意轴的概念。
arr = np.arange(20).reshape(4,5) print('创建的数组:\n',arr) print('数组的和:',np.sum(arr)) print('数组纵轴的和:',np.sum(arr,axis = 0)) print('数组横轴的和:',np.sum(arr,axis = 1)) print('数组的均值:',np.mean(arr)) print('数组横轴的均值:',np.mean(arr,axis = 1)) print('数组的标准差:',np.std(arr)) print('数组横轴的标准差:',np.std(arr,axis = 1))
创作不易 觉得有帮助请点赞关注收藏~~~