🌞欢迎来到机器学习的世界
🌈博客主页:卿云阁💌欢迎关注🎉点赞👍收藏⭐️留言📝
🌟本文由卿云阁原创!
🌠本阶段属于练气阶段,希望各位仙友顺利完成突破
📆首发时间:🌹2021年3月15日🌹
✉️希望可以和大家一起完成进阶之路!
🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!
目录
🍈 一、创建数组
1.基本介绍
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
- 一个强大的N维数组对象 ndarray
- 广播功能函数
- 整合 C/C++/Fortran 代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
NumPy Ndarray 对象
NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型元素的多维数组。
ndarray 中的每个元素在内存中都有相同存储大小的区域。
2.创建数组
1.通过arry函数创建数组
import numpy as np a = np.array([[1, 2], [3, 4]]) print(type(a)) print (a) print (a[1]) 结果: <class 'numpy.ndarray'> [[1 2] [3 4]] [3 4]
2.通过arange()、linspace()、logspace()创建数组
import numpy as np a=np.arange(0,10,2) a #array([0, 2, 4, 6, 8])
b=np.linspace(0,2*np.pi,10) b #array([0. , 0.6981317 , 1.3962634 , 2.0943951 , 2.7925268 , 3.4906585 , 4.1887902 , 4.88692191, 5.58505361, 6.28318531])
c=np.logspace(0,2,10) c #array([ 1. , 1.66810054, 2.7825594 , 4.64158883, 7.74263683, 12.91549665, 21.5443469 , 35.93813664, 59.94842503, 100. ])
(1)linspace(),可用来创建等差数列
(2)logspace(),可用来创建等比数列
3.数组
zhang_list=[1,2,3,4,5]#对于ndarray结构来说,里面的元素必须是同一类型,如果不是,会自动地向下进行转化 zhang_array=np.array(zhang_list) zhang_array 结果: array([1., 2., 3., 4., 5.]) type(zhang_array) 结果: numpy.ndarray zhang_array.dtype 结果: dtype('int32') zhang_array.itemsize #一个整形占的字节数 结果: 8 zhang_array.shape #数组的维度,对于矩阵,n 行 m 列 结果: (5,) zhang_array.size #数组元素的总个数,相当于 .shape 中 n*m 的值 结果: 5 zhang_array.ndim #轴的数量或维度的数量 结果: 1 zhang_array.fill(0) zhang_array 结果: array([0., 0., 0., 0., 0.]) zhang_list=[1,2,3,4,5]#对于ndarray结构来说,里面的元素必须是同一类型,如果不是,会自动地向下进行转化 zhang_array=np.array(zhang_list) zhang_array 结果: array([1, 2, 3, 4, 5]) zhang_array[0]#索引 结果: 1 zhang_array[1:3] #切片 结果: array([2, 3])
3.数组结构zhang_array=np.array([[1,2,3], [4,5,6], [7,8,9]]) zhang_array 结果: array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) zhang_array.size 结果: 9 zhang_array[1,1] #取元素 结果: 5 zhang_array[1] #取行 结果: array([ 4, 10, 6]) zhang_array[:,1] #取列 结果: array([ 2, 10, 8]) zhang_array2=zhang_array #指向的是同一个位置 zhang_array2=zhang_array.copy#指向的不同的位置 zhang_array=np.arange(0,100,10) #等差数组 zhang_array 结果: array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90]) random_array=np.random.rand(10) #随机数 random_array 结果: array([0.87101319, 0.76531048, 0.72086224, 0.05751785, 0.09925279, 0.44513263, 0.64892437, 0.32617306, 0.79782336, 0.79721813]) zhang_array=np.array([10,20,30,40,50]) zhang_array>30 结果: array([False, False, False, True, True]) np.where(zhang_array>30) 结果: (array([3, 4], dtype=int64),) zhang_array[np.where(zhang_array>30)] 结果: array([40, 50])
4.数组类型
zhang_array=np.array([1,2,3,4,5],dtype=np.float32) zhang_array 结果: array([1., 2., 3., 4., 5.], dtype=float32)
5.数值运算
zhang_array=np.array([[1,2,3], [4,5,6], ]) zhang_array 结果: array([[1, 2, 3], [4, 5, 6]]) np.sum(zhang_array) 结果: 21 #指定要进行的操作沿着什么维度 np.sum(zhang_array,axis=0) 结果: array([5, 7, 9]) zhang_array.ndim 结果: 2 np.sum(zhang_array,axis=1) #求和 结果: array([ 6, 15]) zhang_array.sum(axis=1) 结果: array([ 6, 15]) zhang_array.prod() #乘积 结果: 720 zhang_array.max() #最值 结果: 6 zhang_array.argmax()#最大值的位置 结果: 5 zhang_array.argmax() #均值 结果: 5 zhang_array.std() #标准差 结果: 1.707825127659933 zhang_array.var() #标准差 结果: 2.9166666666666665 zhang_array.clip(2,4)#小于2的数变成2,大于4的数变成4 结果: array([[2, 2, 3], [4, 4, 4]]) zhang_array.round(decimals=1)#四舍五入,精确到小数点后一位 结果: array([[1, 2, 3], [4, 5, 6]])
6.排序操作
import numpy as np zhang_array= np.array([[1.5,1.3,7.5 ], [5.6,7.8,1.2 ]]) zhang_array 结果: array([[1.5, 1.3, 7.5], [5.6, 7.8, 1.2]]) np.sort(zhang_array) 结果: array([[1.3, 1.5, 7.5], [1.2, 5.6, 7.8]]) np.argsort(zhang_array) 结果: array([[1, 0, 2], [2, 0, 1]], dtype=int64) zhang_array= np.linspace(0,10,10) zhang_array 结果: array([ 0. , 1.11111111, 2.22222222, 3.33333333, 4.44444444, 5.55555556, 6.66666667, 7.77777778, 8.88888889, 10. ]) value=np.array([2.5,6.5,9.5]) np.searchsorted(zhang_array,value)#value应插入的位置 结果: array([3, 6, 9], dtype=int64) zhang_array=np.array([[1,0,6], [1,7,0], [2,3,1], [2, 4, 0]]) zhang_array 结果: array([[1, 0, 6], [1, 7, 0], [2, 3, 1], [2, 4, 0]]) index=np.lexsort([-1*zhang_array[:,0],zhang_array[:,2]]) index 结果: array([3, 1, 2, 0], dtype=int64) index=zhang_array[index] #第一列升序,第三列降序 zhang_array 结果: array([[1, 0, 6], [1, 7, 0], [2, 3, 1], [2, 4, 0]])
7.数组形状操作
import numpy as np zhang_array= np.arange(10) zhang_array 结果: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) zhang_array.shape 结果: (10,) zhang_array.shape=2,5 #2行5列,大小不能改变 zhang_array 结果: array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]) zhang_array.reshape(1,10) 结果: array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]) zhang_array= np.arange(10) zhang_array.shape 结果: (10,) zhang_array=zhang_array[:,np.newaxis]#增加轴 zhang_array.shape 结果: (10, 1) zhang_array=zhang_array.squeeze()#减少轴 zhang_array.shape 结果: (10,) zhang_array.shape=2,5 zhang_array 结果: array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]) zhang_array.transpose()#转置 array([[0, 5], [1, 6], [2, 7], [3, 8], [4, 9]]) zhang_array#原始未改变 结果: array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]) #连接 a=np.array([1,2,3]) b=np.array([4,5,6]) c=np.concatenate((a,b)) c 结果: array([1, 2, 3, 4, 5, 6]) c.shape 结果: (6,) np.hstack((a,b)) 结果: array([1, 2, 3, 4, 5, 6]) np.vstack((a,b)) 结果: array([[1, 2, 3], [4, 5, 6]]) #原始数组的拉平 a.ravel() 结果: array([1, 2, 3])
8.数组生成函数
import numpy as np zhang_array= np.arange(2,20,2) zhang_array 结果: array([ 2, 4, 6, 8, 10, 12, 14, 16, 18]) zhang_array= np.linspace(0,10,10)#平均距离 zhang_array 结果: array([ 0. , 1.11111111, 2.22222222, 3.33333333, 4.44444444, 5.55555556, 6.66666667, 7.77777778, 8.88888889, 10. ]) zhang_array= np.logspace(0,1,5)#默认以十为底 zhang_array 结果: array([ 1. , 1.77827941, 3.16227766, 5.62341325, 10. ])
9.常用的生成函数
np.zeros(3) 结果: array([0., 0., 0.]) np.zeros((3,3)) 结果: array([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]]) np.ones((3,3)) 结果: array([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.]]) a=np.empty(6) a.shape 结果: (6,) a.fill(1) a 结果: array([1., 1., 1., 1., 1., 1.]) np.ones_like(a) 结果: array([1., 1., 1., 1., 1., 1.]) np.identity(5) array([[1., 0., 0., 0., 0.], [0., 1., 0., 0., 0.], [0., 0., 1., 0., 0.], [0., 0., 0., 1., 0.], [0., 0., 0., 0., 1.]])
10.NumPy 算术函数
import numpy as np a = np.arange(9, dtype = np.float_).reshape(3,3) print ('第一个数组:') print (a) print ('\n') print ('第二个数组:') b = np.array([10,10,10]) print (b) print ('\n') print ('两个数组相加:') print (np.add(a,b)) print ('\n') print ('两个数组相减:') print (np.subtract(a,b)) print ('\n') print ('两个数组相乘:') print (np.multiply(a,b)) print ('\n') print ('两个数组相除:') print (np.divide(a,b)) 结果: 第一个数组: [[0. 1. 2.] [3. 4. 5.] [6. 7. 8.]] 第二个数组: [10 10 10] 两个数组相加: [[10. 11. 12.] [13. 14. 15.] [16. 17. 18.]] 两个数组相减: [[-10. -9. -8.] [ -7. -6. -5.] [ -4. -3. -2.]] 两个数组相乘: [[ 0. 10. 20.] [30. 40. 50.] [60. 70. 80.]] 两个数组相除: [[0. 0.1 0.2] [0.3 0.4 0.5] [0.6 0.7 0.8]]
10.随机模块
(1)生成m行列的矩阵(所有的值都是从0到1的)
import numpy as np #所有的值都是从0到1的 np.random.rand(3,2) 结果: array([[0.02191337, 0.75211679], [0.3368873 , 0.12833534], [0.25595601, 0.60613353]])
(2)返回一个数
np.random.rand()#返回一个数 结果: 0.885484190404924
(3)返回随机样本
np.random.random_sample()#返回随机样本 结果: 0.050287016652027394
(4)0-10中找三个数
np.random.randint(0,10,3)#0-10中找三个数 结果: array([8, 8, 9])
(5)设置精度
np.set_printoptions(precision=3)#设置精度 mu,sigma=0,0.1 np.random.normal(mu,sigma,10) 结果: array([-0.131, 0.058, -0.062, 0.023, -0.104, 0.188, -0.123, -0.023, -0.14 , -0.033])
(6)洗牌
#洗牌 zhang_array=np.arange(10) zhang_array np.random.shuffle(zhang_array) zhang_array 结果: array([3, 7, 5, 2, 6, 1, 9, 4, 0, 8])
(7)随机数种子
#随机的种子 np.random.seed(1) #指定之后不变 mu,sigma=0,0.1 np.random.normal(mu,sigma,10) 结果: array([ 0.162, -0.061, -0.053, -0.107, 0.087, -0.23 , 0.174, -0.076, 0.032, -0.025])
11.文件读写和保存
import numpy as np %%writefile zhang.txt 1 2 3 4 5 6 2 3 5 8 7 9 结果: Writing zhang.txt
data=np.loadtxt('zhang.txt') data 结果: array([[1., 2., 3., 4., 5., 6.], [2., 3., 5., 8., 7., 9.]]
*zhang.txt;最好和路径放在一起
*skiprows:去掉几行
*delimiter=',':分隔符
*usecols=(0,1,4):指定使用那几行np.savetxt('zhang3.txt',zhang_array,fmt='%d')#保存成整数的格式
12.数组保存
#读写arry结构 zhang_array=np.array([[1,2,3],[4,5,6]]) np.save('zhang_array.npy',zhang_array)
zhang=np.load('zhang_array.npy') zhang 结果: array([[1, 2, 3], [4, 5, 6]])
多个数组的压缩保存
zhang_array2=np.arange(10) np.savez('zhang_array.npz',a=zhang_array,b=zhang_array2)#多个数组的压缩保存 data=np.load('zhang_array.npz')
data['a'] 结果: array([[1, 2, 3], [4, 5, 6]]) data['b'] 结果: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
🍍二、Numpy教程
https://www.runoob.com/numpy/numpy-tutorial.htmlhttps://www.runoob.com/numpy/numpy-tutorial.html