来自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