目录
numpy的概念
一、创建数组
1、转换列表、元组、对象成数组
2、一维数组
3、二维数组
4、等差数组
5、单位矩阵、对角矩阵、空数组
6、随机数组
二、测试元素是否接近
1、概念
2、isclose()函数
3、allclose()函数
4、函数用法演示
三、修改数组元素值
1、概念
2、追加、插入元素
3、修改元素
广播思想
1、例如
2、可广播的条件
四、数组与标量的运算
1、概念
2、加、减、乘、除、幂、余数
五、数组与数组的运算
1、概念
2、加减
3、乘除、次幂
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的元素,以此类推