Python之numpy数组篇(上)
numpy的概念
numpy是python支持科学计算的重要扩展库,提供了强大的N维数组及其相关运算、复杂的广播函数等功能,掌握numpy的使用,是为学习数据分析、机器学习打下良好的基础
import numpy as np
一、创建数组
1、转换列表、元组、对象成数组
np.array([1,2,3,4,5])#把列表转换为数组 np.array((0,1,2,3,4))#把元组转换为数组 np.array(range(5))#把range对象转换为数组 np.arange(8)#类似于内置函数range()
2、一维数组
np.zeros(3)#全0一维数组 np.ones(3)#全1一维数组
3、二维数组
np.array([[1,2,3],[4,5,6]])#二维数组 np.zeros((3,3))#全0二维数组,3行3列 np.zeros((3,1))#全0二维数组,3行1列 np.ones((3,3))#全1二维数组 np.ones((1,3))#全1二维数组
注意:一维数组小括号内是数值,二维数组小括号内是元组、列表等,即一维数组仅一对小括号,二维数组会有多对括号
4、等差数组
np.linspace(0,10,11)#等差数组,包含11个数 np.linspace(0,10,11,endpoint=False)#不包含终点 np.logspace(0,100,10)#相当于10**np.linspace(0,100,10) np.logspace(1,6,5,base=2)
5、单位矩阵、对角矩阵、空数组
np.identity(3)#单位矩阵 np.diag([1,2,3,4])#对角矩阵 np.empty((3,3))#空数组,只申请空间,不初始化
6、随机数组
np.random.randint(0,50,5)#随机数组,5个0到50之间的数字 np.random.randint(0,50,(3,5))#3行5列 np.random.rand(10)#10个介于[0,1)的随机数 np.random.standard_normal(5)#从标准正态分布中随机采样5个数字 x = np.random.standard_normal(size=(2,4,3))#3页4行2列 x
二、测试元素是否接近
1、概念
扩展库numpy提供了isclose()和allclose()函数,测试两个数组中对应位置上的元素在允许误差范围内是否相等,并可以接收绝对误差参数和相对误差参数
2、isclose()函数
(1)用来测试每一对元素是否相等并返回包含若干True/False的列表
(2)格式
isclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)
3、allclose()函数
(1)用来测试所有对应位置上的元素是否都相等并返回单个True或False
(2)格式
allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)
4、函数用法演示
import numpy as np x = np.array([1,2,3,4.001,5]) y = np.array([1,1.999,3,4.01,5.1]) print(np.allclose(x,y)) print(np.allclose(x,y,rtol=0.2)) #设置相对误差参数 print(np.allclose(x,y,atol=0.2)) #设置绝对误差参数 print(np.isclose(x,y)) print(np.isclose(x,y,atol=0.2))
三、修改数组元素值
1、概念
numpy支持多种方式修改数组中元素的值
(1)可以append()、insert()函数在原数组的基础上追加或插入元素并返回新数组
(2)也可以用下标的方式直接修改数组中一个或多个元素的值
2、追加、插入元素
x = np.arange(8) x np.append(x,8) #返回新数组,在尾部追加一个元素 np.append(x,[9,10]) #返回新数组,在尾部追加多个元素 np.insert(x,1,8) #返回新数组,插入元素 x #不影响原来的数组
3、修改元素
(1)一维数组的单个元素值修改
x = np.arange(8) x[3] = 8 #使用下标的形式原地修改元素值 x #原来的数组被修改了
(2)二维数组的单个元素及切片式修改
x = np.array([[1,2,3],[4,5,6],[7,8,9]]) x[0,2] = 4 #修改第0行第2列的元素值 x[1:,1:] = 1 #切片,把行和列下标都大于等于1的元素值都设为1 x
(3)二维数组同时修改多个元素
x[1:,1:] = [1,2] #同时修改多个元素值,此处运用了广播思想 x x[1:,1:] = [[1,2],[3,4]] #同时修改多个元素值 x
广播思想
1、例如
(1)数组在某维度上元素的长度相等
(2)数组在某维度上元素的长度为1
四、数组与标量的运算
1、概念
(1)numpy中的数组支持与标量的加、减、乘、除、幂运算
(2)计算结果为一个新数组,其中每个元素为标量与原数组中每个元素进行计算的结果,注意标量在前和后时计算的方法是不同的,且原数组值不变
2、加、减、乘、除、幂、余数
(1)加法:注意区别普通列表的加法是拼接,而numpy的加法是数组每个元素的值分别与数值相加运算后生成新的数组
x + 2 #数组与数组相加 print([1,2,3,4] + [2]) #普通列表的加法
(2)乘除:注意区别普通列表的乘法是重复,而numpy的乘法是数组每个元素的值分别与数值相乘运算后生成新的数组
x * 2 #数组与数值相乘,返回新数组 print([1,2,3,4,5] * 2) #普通列表的乘法 x / 2 #数组与数值相除 x // 2 #数组与数值整除 2 / x 63 // x
(3)幂运算,余数,次方运算
x ** 3 #幂运算 x % 3 #余数 2 ** x #分别计算2**1、2**2、2**3、2**4、2**5
五、数组与数组的运算
1、概念
(1)两个数组等长时,进行算术运算后,会得到一个新数组,新数组每个元素值为原来两个数组对应位置上元素进行运算的结果
(2)两个数组不等长时,如果符合广播要求则进行广播再做运算,否则报错并结束运行
2、加减
np.array([1,2,3,4]) + np.array([4,3,2,1]) #等长数组相加,对应元素的值相加 np.array([1,2,3,4]) + np.array([4]) #数组中每个元素的值加4 a = np.array((1,2,3)) a + a #等长数组之间的加法运算,对应元素值相加 a - a #等长数组之间的加法运算,对应元素值相减 b = np.array(([1,2,3],[4,5,6],[7,8,9])) a + b #不同维度的数组与数组相加,先做广播再做运算
3、乘除、次幂
a * a #等长数组之间的乘法运算,对应元素值相乘 a / a #等长数组之间的除法运算,对应元素值相除 a ** a ##等长数组之间的幂运算,对应元素值乘方 c = a * b c #不同维度,广播,a中的每个元素乘以b中对应列的元素,a中下标0的元素乘以b中列下标0的元素,以此类推
Python概述及应用领域,PyCharm、Jupyter notebook的安装与使用,编码规范,标准库、扩展库对象的导入与使用