第六章. 图解数组计算模块Numpy
6.1 数据的相关概念和创建数组
Numpy是Python数组计算,矩阵运算和科学计算的核心库,它的用途是以数组的形式对数据进行操作,由于Numpy是通过C语言实现的,所以运算速度比较快。
1. Numpy的功能:
- 有一个强大的N维数组对象ndarray
- 广播功能函数
- 线性代数,傅里叶变换,随机数生成,图形操作能功能
- 整合C/C++/Fortran代码的工具
2.数组的相关概念
1).一维数组:
- 一维数组基本与python列表一样,区别在于数组切片针对的是原始数据
2).二维数组:
- 二维数组的本质是以数组作为数组元素,二维数组包括行和列,类似于表格形状,又称为矩阵
3).三维数组:
- 三维数组是指维数为三的数组结构,也称为矩阵列表,最常见的多维数组
4).轴的概念:
- 轴是Numpy模块中的axis,指定某个axis,就是沿着这个axis做相关的操作
3.创建简单的数组(numpy.array)
1).语法:
numpy.array(object,dtype=None,copy=True,order='K',subok=False,ndmin=0)
参数说明:
object:任何具有数据接口方法的对象
dtype:数据类型
copy:是否复制object对象,默认值True
order:元素在内存中的出现顺序,值为K(元素在内存中的出现顺序),A(原顺序),C(按行),F(按列)
subok:若值True,则将传递子类,否则返回基类,默认值为False
ndmin:指定生成数组的最小维数
2).示例:
·示例1:为数组指定数据类型
list = [1.1, 2.2, 3.7]
n1 = np.array(list, dtype=int)
n2 = np.array(list, dtype=float)
·示例2:数组的复制
n1 = np.array([1, 2, 3])
n2 = np.array(n1, copy=True)
n2[0] = 5
n2[1] = 4
·示例3:通过ndmin参数控制最小维数
list = [1, 2, 3]
n1 = np.array(list, ndmin=3)
4.不同方式创建数组
·创建指定维度和数据类型未初始化的数组
n1 = np.empty([2, 3], dtype=float)
·示例:创建指定维度,以0填充的数组
n1 = np.zeros([2, 3], dtype=float)
·示例:创建指定维度,以1填充的数组
n1 = np.ones([2, 3], dtype=int)
·示例:创建指定维度和数据类型,并填充指定值
n1 = np.full([3, 2], 6)
·示例:创建对角矩阵
n1=np.eye(4)
5.从数值范围创建数组
1).使用arange函数创建数组
arange函数同python内置的range函数相似,区别在于返回值,arange返回值是数组,range返回值是列表。
·语法:
numpy.arange([start,],stop[,step,],dtype=None)
参数说明:
start:起始值,默认值为0
stop:终止值(不包含)
step:步长,默认值为1
dtype:数据类型,不设置为数据的输入类型
·示例:
n1 = np.arange(0, 10, 2, dtype=float)
2).使用linspace函数创建等差数列:
等差数列:如果一个数列从第二项起,每一项与前一项的差等于同一个常数
·语法:
numpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)
参数说明:
start:序列的起始值
stop:序列的终止值,如果endpoint=True,该值包含在序列中
num:要生成等步长的样本数量,默认值为50
endpoint:决定有区间是开区间还是闭区间,endpoint=True,闭区间
retstep:生成的数组中是否显示间距,retstep=True,显示间距
dtype:数组的数据类型
·示例:
n1 = np.linspace(-5, 5, 5)
3).使用logspace函数创建等比数列:
等比数列:如果一个数列从第二项起,每一项与前一项的比值等于同一个常数
·语法:
numpy.logspace(start,stop,num=50,endpoint=True,base=10.0, dtype=None)
参数说明:
start:序列的起始值
stop:序列的终止值,如果endpoint=True,该值包含在序列中
num:要生成等步长的样本数量,默认值为50
endpoint:决定有区间是开区间还是闭区间,endpoint=True,闭区间
base:对数log的底数
dtype:数组的数据类型
·示例:
n1 = np.logspace(0, 9, 10, base=2, dtype=int)
6.生成随机数组
随机数组的生成主要使用Numpy中的random模块。
1).使用rand函数创建数组
rand函数用于生成(0,1)之间的随机数组,传入一个值随机生成一维数组,传入一对值随机生成二维数组。
·语法:
numpy.random.rand(d0,d0,d2,...,dn)
参数说明:
d0,d0,d2,…,dn:维度,整数,可以为0
·示例:
n1 = np.random.rand(5) # 一维数组
n1 = np.random.rand(5, 2) # 二维数组
2).使用randn函数创建数组
randn函数用于从正态分布中返回随机生成的数组
·语法:
numpy.random.randn(d0,d0,d2,...,dn)
参数说明:
d0,d0,d2,…,dn:维度,整数,可以为0
·示例:
n1 = np.random.randn(5) # 一维数组
n1 = np.random.randn(5, 2) # 一维数组
3).使用randint函数创建数组
randint函数用于生成一定范围内的随机数组,左闭右开,与np.arange函数类似。
·语法:
numpy.random.randint(low,high=None,size=None)
参数说明:
low:起始值,整数,当参数high不为空时,参数low<参数high,否则程序会出现错误
high:终止值,整数
size:数组维数,整数(表示一维数组),元组(表示多维数组),为空,返回一个整数
·示例:
n1 = np.random.randint(1, 10, 7) # 随机生成[1,10)之间的7个整数
n1 = np.random.randint(1, 10) # 随机生成[1,10)之间的一个整数(数组大小为空)
n1 = np.random.randint(10, size=(5, 2)) # 随机生成10以内的二维数组
4).使用normal函数创建数组
normal函数用于生成正态分布的随机数
·语法:
numpy.random.normal(loc,scale,size)
参数说明:
loc:正态分布的均值,对应正态分布的中心,loc=0:说明是一个以y轴为对称轴的正态分布
scale:正态分布的标准差,,对应正态分布的宽度,scale越大,正态分布曲线越矮胖,scale越小,正态分布曲线越高瘦
size:数组的维数
·示例:
n1 = np.random.normal(0, 0.1, 10)
7.从已有的数组中创建数组
1).使用asarray函数创建数组
asarray函数用于创建数组,与array函数类似
·语法:
numpy.asarray(a,dtype=None,order=None)
参数说明:
a:可以是列表,列表的元组,元组,元组的元组,元组的列表或多维数组
dtype:数组的数据类型
order:数据元素在内存中出现的顺序
·示例:
n1 = np.asarray([1.1, 3.3, 2.2], dtype=float)
2).使用frombuffer函数创建数组
Numpy中的ndarray数组对象不能像Python列表一样动态的改变其大小,因此在做数据采集时不是很方便。frombuff函数可实现动态数组,frombuff函数接受buffer输入参数,以流的形式将读入的数据转换为数组。
·语法:
numpy.frombuffer(buff,dtype=float,count=-1,offset=0)
参数说明:
buff:实现了__buffer__方法的对象
dtype:数组的数据类型
count:读取的数据数量。默认值为-1:读取全部数据
offset:读取的起始位置,默认值为0
·示例:
n1 = np.frombuffer(b'pycharm', dtype='S1')
注意:当buffer参数值为字符串时,Python3版本默认字符串是Unicode类型,需转换成Byte string类型,需要在原字符串前加 b
3).使用formiter函数创建数组
fromiter函数用于从可迭代对象中建立数组对象。
·语法:
numpy.fromiter(iter, dtype, count=-1)
参数说明:
iter:可迭代对象
dtype:数组的数据类型
count:读取的数据数量,默认值为-1:读取所有数据
·示例:
iter = (x ** 2 for x in range(5))
n1 = np.fromiter(iter=iter, dtype='int')
4).使用empty_like函数创建数组
用于创建一个与给定数组具有相同维度和数据类型且未初始化的数组。
·语法:
numpy.empty_like(prototype, dtype=None, order=None, subok=None, shape=None)
参数说明:
prototype:给定的数组
dtype:数组的数据类型
order:给定数组的内部布局,C(按行),F(按列), A (原顺序),K(数据元素在内存中出现的顺序)
subok:默认情况下返回基类数组,subok=True,返回子类
·示例:
n1 = np.empty_like([[1, 2], [3, 4], [5, 6]])
5).使用zeros_like函数创建数组
·语法:
numpy.zeros_like(a, dtype=None, order='K', subok=True, shape=None)
参数说明:
a:可以是列表,列表的元组,元组,元组的元组,元组的列表或多维数组
dtype:数组的数据类型
order:给定数组的内部布局,C(按行),F(按列), A (原顺序),K(数据元素在内存中出现的顺序)
subok:默认情况下返回基类数组,subok=True,返回子类
·示例:
n1 = np.zeros_like([[1, 2], [3, 4], [5, 6]], dtype=float)
6).使用ones_like函数创建数组
·语法:
numpy.ones_like(a, dtype=None, order='K', subok=True, shape=None)
参数说明:
a:可以是列表,列表的元组,元组,元组的元组,元组的列表或多维数组
dtype:数组的数据类型
order:给定数组的内部布局,C(按行),F(按列), A (原顺序),K(数据元素在内存中出现的顺序)
subok:默认情况下返回基类数组,subok=True,返回子类
·示例:
n1 = np.ones_like([[1, 2], [3, 4], [5, 6]], dtype=int)
7).使用full_like函数创建数组
·语法:
numpy.full_like(a, fill_value, dtype=None, order='K', subok=True, shape=None)
参数说明:
a:可以是列表,列表的元组,元组,元组的元组,元组的列表或多维数组
fill_value:填充值
dtype:数组的数据类型
order:给定数组的内部布局,C(按行),F(按列), A (原顺序),K(数据元素在内存中出现的顺序)
subok:默认情况下返回基类数组,subok=True,返回子类
·示例:
n1 = np.full_like([[1, 2], [3, 4], [5, 6]], fill_value=6)