目录
numpy是python支持科学计算的重要扩展库,提供了强大的N维数组及其相关运算、复杂的广播函数等功能,掌握numpy的使用,是为学习数据分析、机器学习打下良好的基础
注意:本章代码例子,大多省略numpy的引入,小伙伴们演示时记得先导入🧐:
import numpy as np
- np.array([1,2,3,4,5])#把列表转换为数组
- np.array((0,1,2,3,4))#把元组转换为数组
- np.array(range(5))#把range对象转换为数组
- np.arange(8)#类似于内置函数range()

- np.zeros(3)#全0一维数组
- np.ones(3)#全1一维数组

- 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二维数组

注意:一维数组小括号内是数值,二维数组小括号内是元组、列表等,即一维数组仅一对小括号,二维数组会有多对括号
- 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)

- np.identity(3)#单位矩阵
- np.diag([1,2,3,4])#对角矩阵
- np.empty((3,3))#空数组,只申请空间,不初始化

- 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

扩展库numpy提供了isclose()和allclose()函数,测试两个数组中对应位置上的元素在允许误差范围内是否相等,并可以接收绝对误差参数和相对误差参数
(1)用来测试每一对元素是否相等并返回包含若干True/False的列表
(2)格式
isclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)
(1)用来测试所有对应位置上的元素是否都相等并返回单个True或False
(2)格式
allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)
- 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))

numpy支持多种方式修改数组中元素的值
(1)可以append()、insert()函数在原数组的基础上追加或插入元素并返回新数组
(2)也可以用下标的方式直接修改数组中一个或多个元素的值
- x = np.arange(8)
- x
- np.append(x,8) #返回新数组,在尾部追加一个元素
- np.append(x,[9,10]) #返回新数组,在尾部追加多个元素
- np.insert(x,1,8) #返回新数组,插入元素
- x #不影响原来的数组

(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 2]行广播为
(1)数组在某维度上元素的长度相等
(2)数组在某维度上元素的长度为1
(1)numpy中的数组支持与标量的加、减、乘、除、幂运算
(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)两个数组等长时,进行算术运算后,会得到一个新数组,新数组每个元素值为原来两个数组对应位置上元素进行运算的结果
(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 #不同维度的数组与数组相加,先做广播再做运算

- a * a #等长数组之间的乘法运算,对应元素值相乘
- a / a #等长数组之间的除法运算,对应元素值相除
- a ** a ##等长数组之间的幂运算,对应元素值乘方
- c = a * b
- c #不同维度,广播,a中的每个元素乘以b中对应列的元素,a中下标0的元素乘以b中列下标0的元素,以此类推
