目录
概述NumPy
NumPy(Numerical Python的缩写)是 Python 语言的一个第三方库。是一个开源的Python科学计算库和数值计算扩展。NumPy可用来存储和处理大型矩阵,也可以很自然地使用数组和矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库 。NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。这个库的前身是1995年就开始开发的一个用于数组运算的库。经过了长时间的发展,基本上成了绝大部分 Python 科学计算的基础包,当然也包括所有提供 Python 接口的深度学习框架。
一.安装NumPy
1.官网安装:http://www.numpy.org/
2.pip 安装(cmd命令提示符内运行):pip install numpy
3.LFD安装:针对windows用户http://www.lfd.uci.edu/~gohlke/pythonlibs/
4.Anaconda安装(推荐):Anaconda里面集成了很多关于python科学计算的第三方库,主要是安装方便。下载地址:Free Download | Anaconda
5.PyCharm安装:(1)运行PyCharm,选择File>Settings命令>打开Settings对话框,选择Project Interoreter选项>单击添加模块。
(2)在搜索栏中输入需要添加的模块名称为NumPy,然后选择需要安装的模块,单击Install Package按钮即可安装Numpy。
6.安装验证:输入代码验证
from numpy import*#导入numpy库 print(eye(4))#生成对角矩阵
运行代码,输出结果如下:
[[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]]
二.创建数组
numpy是一个用于科学计算的Python库,它提供了一个强大的多维数组对象以及对这些数组进行操作的函数。我们可以使用numpy的array函数来创建数组。
1.使用array函数从Python列表创建一维数组:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr)
2.使用array函数从嵌套的Python列表创建多维数组:
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr)
3.使用zeros函数创建指定大小的全零数组:
import numpy as np arr = np.zeros(5) # 创建包含5个元素的一维数组 print(arr) arr = np.zeros((2, 3)) # 创建2行3列的全零二维数组 print(arr)
4.使用ones函数创建指定大小的全一数组:
import numpy as np arr = np.ones(5) # 创建包含5个元素的一维数组 print(arr) arr = np.ones((2, 3)) # 创建2行3列的全一二维数组 print(arr)
5.使用arange函数创建一个具有指定范围和步长的数组:
import numpy as np arr = np.arange(1, 10, 2) # 创建从1到9,步长为2的一维数组 print(arr)
6.使用linspace函数创建一个具有指定起始值、结束值和元素数量的数组:
import numpy as np arr = np.linspace(0,1,5) # 创建一个在0到1之间分成5个等间距的元素的一维数组 print(arr)
三.数组基本操作
numpy的数据类型比python数据类型增加了更多种类的数值类型。
1.numpy数据类型表:
bool_ 布尔型数据类型(存储一个字节的布尔值(True 或者 False))
int_ 默认的整数类型(类似于 C 语言中的 long,int32)
intc 与 C 的 int 类型一样,一般是 int32
intp 用于索引的整数类型(类似C的size_t,通常为int32)
int8 字节(-128~127)
int16 16位整数(-32768~32767)
int32 32位整数(-2147483648~2147483647)
int64 64位整数(-9223372036854775808~9223372036854775807)
uint8 8位无符号整数(0~255)
uint16 16位无符号整数(0~65535)
uint32 32位无符号整数(0~4294967295)
uint64 64位无符号整数(0~18446744073709551615)
float_ float64 的简写
float16 半精度浮点数:1个符号位,5个指数位,10个尾数位
float32 单精度浮点数:1个符号位,8个指数位,23个尾数位
float64 双精度浮点数:1个符号位,11个指数位,52个尾数位
complex_ complex128 类型的简写
complex64 复数,表示双 32 位浮点数(实部和虚部)
complex128 复数,表示双 64 位浮点数(实部和虚部)
为了区别python数据类型,像bool、int、float、complex、str等数据类型的名称末尾都加了短下划线“_”。
2.实操演示:
(1)
np.int8(3.141)
结果为:3
(2)
np.float64(8)
结果为:8.0
(3)
np.float(True)
结果为:1.0
(4)
bool(1)
结果为:True
(5)
import numpy as np a=np.arange(8,dtype=float) print(a)
结果为:[0.1.2.3.4.5.6.7]
3.注意:
复数不能转换成为整数类型或者浮点数,否则代码报错。
四.NumPy矩阵的基本操作
NumPy库中存在两种不同的数据类型(矩阵matrix和数组array),都可以用于处理行列表示的数字元素,虽然他们看起来很相似,但是在这两个数据类型上执行相同的数学运算可能得到不同的结果,其中Numpy函数库中的matrix与MATLAB中matrices等价。
1.使用mat()函数创建矩阵:
import numpy as np a=np.mat('56,78') b=np.mat([[1,2],[3,4]]) print(a) print(b) print(type(a)) print(type(b)) n1=np.array([[1,2],[3,4]]) print(n1) print(type(n1))
2.创建一个3*3的0(零)矩阵:
import numpy as np data1=np.mat(np.zeros((3,3))) print(data1)
3.使用random模块的rand()函数创建3*3为0~1随机产生的二维数组,将其转成矩阵:
import numpy as np data1=np.mat(np.random.rand(3,3)) print(data1)
4.说明:
mat()函数只适用于二维矩阵,维数超过2以后,mat()函数就不适用了,从这一点来看array()函数更具通用性。
五.NumPy常用统计分析函数
1.数学运算函数表:
add()、subtract()、multiply()、divide() 简单的数组加、减、乘、除运算
abs() 取数组中各元素的绝对值
sqrt() 计算数组中各元素的平方根
square() 计算数组中各元素的平方
sog()、log10()、log2() 计算数组中各元素的自然对数和分别以10、2为底的对数
reciproca() 计算数组中各元素的倒数
power() 第一个数组中的元素作为底数,计算它与第二个数组中相应元素的幂
mod() 计算数组之间相应元素相除后的余数
around() 计算数组中各元素指定小数位数的四舍五入值
ceil()、floor() 计算数组中各元素向上取整和向下取整
sin()、cos()、tan() 三角函数。计算数组中角度的正弦值、余弦值和正切值
modf() 将数组各元素的小数和整数部分分割为两个独立的数组
exp() 计算数组中各元素的指数值
sign() 计算数组中各元素的符号值1(+),0,-1(-)
maximum()、fmax() 计算数组元素的最大值
minimum()、fmin() 计算数组元素的最小值
copysign(a,b) 将数组b中各元素的符号赋值给数组a对应的元素
2.实操演示:
(1)求最大最小值:
import numpy as np arr = np.array([[0,3,1,5],[2,4,6,1],[2,8,9,2]]) #求arr数组的最大值 max1 = np.amax(arr) #求arr数组垂直方向的最大值 max2 = np.amax(arr,axis=0) #求arr数组水平方向的最大值 max3 = np.amax(arr,axis=1) max4 = np.max(arr,axis=1) print(max1,max2,max3,max4) #amin函数与nanmin函数的区别 arr = np.arange(5, dtype=float) print(arr) # [0. 1. 2. 3. 4.] arr[3] = np.nan a = np.amin(arr) print(a) # 用amin函数输出NaN b = np.nanmin(arr) print(b) #用nanmin函数输出0.0
(2)相加、相减、相乘、相除:
import numpy as np n1=np.array([[1,2,3],[4,5,6],[7,8,9]]) n2=np.array([10,10,10]) print('两个数组相加:') print(np.add(n1,n2)) print('两个数组相减:') print(np.subtract(n1,n2)) print('两个数组相乘:') print(np.multiply(n1,n2)) print('两个数组相除:') print(np.divide(n1,n2))
(3)倒数:
import numpy as np a=np.array([0.25,1.75,2,100]) print(np.reciprocal(a))
(4)求幂:
import numpy as np n1=np.array([10,100,1000]) print(np.power(n1,3)) n2=np.array([1,2,3]) print(np.power(n1,n2))
(5)求余:
import numpy as np n1=np.array([10,20,30]) n2=np.array([4,5,-8]) print(np.mod(n1,n2))
3.知识扩展:
下面重点介绍NumPy负数取余的算法,公式如下 :
其中r为余数,a是被除数,n是除数,“/1”为这运算取商时保留整数的下界,即偏向于较小的整数。根据负数取余的3种情况,举例如下:
r=30-(-8)*(30//(-8))=30-(-8)*(-4)=30-32=-2
r=-30-(-8)*(-30//(-8))=-30-(-8)*(3)=-30-24=-6
r=-30-(8)*(-30//(8))=-30-(8)*(-4)=-30+32=2
六.总结
学习numpy真的会在日常工作中提高工作效率,NumPy 也针对数组运算提供大量的数学函数。机器学习涉及到大量对数组的变换和运算,NumPy 就成了程序员必不可少的工具之一。