来自B站up奇乐编程学院的视频,用作个人学习笔记,视频链接在文章最后
写在前面
NumPy可以表示一维数组,二维矩阵和更高维的数据,可以对数组中的数据进行非常高效的运算,可以用作数据统计、图像处理、线性代数、傅里叶变换等。Python很慢,NumPy快是因为底层是C语言实现的目标代码,对于要运算的数据,要预先表示成NumPy数组的形式,即向量化,
要想更快的话,可以用GPU对数据进行并行运算。
1.基本命令
>>>import numpy as np #导入numpy库,并起个别名为np
>>>np. array ([1,2,3,4,5]) #创建一个数组
array([1,2,3,4,5])
>>>np.zeros((3,2)) #创建3行2列全为0的数组
array([[0.,0.],
[0.,0.],
[0.,0.]])
>>>a.shape#获取数组的尺寸
(3,2)
>>>np.ones((2,4)) #创建2行4列全为1的数组
array([[1.,1.,1.,1.],
[1.,1.,1.,1.]])
>>>>>>np.arange(3, 7) #创建递增递减的数组,3到6
array([3,4,5,6])
>>>np.linspace(0,1,5) #0到1,等间距输出5个数的数组
array([0.,0.25,0.5,0.75,1.])
>>>np.random.rand(2,4) #生成2行4列随机数组
array([[0.14057429,0.62834719,0.32584384,0.65987532],
[0.87983105,0.20645261,0.35017101,0.11197953]])
>>>a.dtype #numpy中数组默认数据类型是64位浮点数
dtype('float64')
>>>a = np.zeros((4,2), dtype=np.int32) #可以在创建数组时指定数组里数据的类型
#np.int8/16/32/64 整型
#np.uint8/16/32/64 无符号整型
#np.float32/64 浮点数
#bool 布尔值
#str 字符串 ......
>>>b = a.astype(int) #将现有的数组转化为别的数据类型
2.数组基本运算
>>>a = np.array([1,2,3]) >>>b = np.array([4,5,6]) >>>a + b array([5,7,9]) >>>a / b array([0.25,0.4,0.5]) #同尺寸数组的四则运算,同位置进行加减乘除 >>>np.dot(a,b) #dot点乘运算,两个向量做内积 32 >>>a = np.array([[1,2],[3,4]]) >>>b = np.array([[2,0],[0,2]]) >>>a @ b array([[2,4],[6,8]]) #a @ b表示a与b做矩阵乘法,而不是简单的各位置元素相乘 >>>a = np.array([1,2,3]) >>>np.sqrt(a) array([1.,1.41421356,1.73205081]) #对数组中每个数据做平方根 >>>np.sin(a) array([0.84147098,0.90929743,0.14112001]) #sin三角函数运算 >>>np.cos(a) array([0.54030231,-0.41614684,-0.9899925]) #cos三角函数运算 >>>np.log(a) array([0.,0.69314718,1.09861229]) #log对数运算 >>>np.power(a,2) array([1,4,9],dtype=int32) #指数运算 >>>a * 5 array([5,10,15]) #数乘矩阵运算 >>>a.min 1 #最小值 >>>a.max 3 #最大值 >>>a.argmin() 0 #最小值索引 >>>a.argmax() 2 #最大值索引 >>>a.sum() 6 #求和 >>>a.mean() 2.0 #计算平均值 >>>np.median(a) 2.0 #找出中位数 >>>a.var() #方差 >>>a.std() #标准差 >>>a = np.array([[1], [10], [20]]) >>>b=np.array([0,1,2]) >>>a + b array([1 , 2, 3], [10,11,12], [20,21,22]]) #不同尺寸的数组也可以做运算,广播 >>>a=np.array([[1,2,3,4,5], [5,6,7,8,9]]) >>> a.sum(axis=0) array([6,8,10,12,14]) #参数axis=0时,表示行向量相加 >>>a.sum(axis=1) array([15,35]) #参数axis=1时,表示列向量相加,以此类推,可推广至n维 >>>a[0,1] #返回第1行第2列的元素的值 >>>a[a<3] #返回一个数组,里面是所有a<3的元素 >>>a[(a>3)&(a%2 == 0)] #表示返回一个数组,里面包含所有a>3并且是偶数的数,此处使用逻辑运算符,与(&),或(|) >>>a[0,0:2] #返回第1行,1到2列的数组 >>>a[0,:] #返回第1行,所有列的数组,下面的写法也可以 >>>a[0] >>>a[0:9:2] #2表示stride跨度,可以去负值,总结
NumPy大大提升了Python中数据计算速度,NumPy中更核心的问题是将问题向量化、并行化的思路。给希望深入学习NumPy的同学推荐这本书《从Python到NumPy》,同时NumPy的官方文档是学习NumPy的最好资料
写在最后NumPy入门只是介绍了最基本的命令,更复杂的命令自己去找个项目做一下,在项目中熟悉命令再好不过
一个10分钟的numpy入门教程https://www.bilibili.com/video/BV1Wy4y1h7ii?spm_id_from=333.999.0.0



