Numpy基本操作
1. 数组创建
numpy中所有的计算都是围绕着数组进行的,因此在运算之前,我们需要将计算的数据表示成数组的形式。
-
我们可以用
np.array()来创建一个数组:np.array([1, 2, 3, 4, 5]) # array([1, 2, 3, 4, 5]) -
np.zeros()创建一个全为零的数组:np.zeros((2, 3)) # 参数为元组,表示2行3列 # array([[0., 0.], # [0., 0.], # [0., 0.]]) -
类似地,可以使用
np.ones()创建一个全为1的数组:np.ones((2, 4)) # array([[1., 1., 1., 1.], # [1., 1., 1., 1.]]) -
使用
np.arange()创建一个递增或递减的数列,类似于python的range()。np.arange(3, 7) # [3, 7) # array([3, 4, 5, 6]) np.arange(3, 10, 2) # array([3, 5, 7, 9]) np.arange(10, 2, -3) #array([10, 7, 4]) -
np.linspace()会返回介于某个区间等间距分布的数,前两个参数是区间的范围,第三个参数是输出样本的总数:# 返回一个0-1范围内等间距分布的5个数 np.linspace(0, 1, 5) # array([0. , 0.25, 0.5 , 0.75, 1. ]) -
通过
np.random.rand()生成随机的数组(数字范围0-1):np.random.rand(2, 4) # array([[0.90823579, 0.13280413, 0.48167232, 0.47886157], # [0.73089321, 0.39703329, 0.09461766, 0.5481924 ]]) -
在numpy中,数组默认的数据类型是64位的浮点数:
a = np.zeros((2, 4)) a.dtype # dtype('float64') -
可以在创建数组时,通过
dtype指定其他的数据类型:a = np.zeros((2, 4), dtype=np.int32) a.dtype # dtype('int32')也可以通过
araay.astype()来转换数据类型:b = a.astype(int) b # array([[0, 0, 0, 0], # [0, 0, 0, 0]])
2. 基本运算
在numpy中我们可以轻松地对数组进行常见的数学运算。
-
两个相同尺寸的数组可以直接进行四则运算,它会将数组同位置的元素进行加减乘除:
a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) a + b # array([5, 7, 9]) a / b # array([0.25, 0.4 , 0.5 ]) -
在乘法运算中还有一个点乘
np.dot(),这个函数会对两个向量进行点乘运算:np.dot(a, b) # 32 -
与之类似的还有矩阵乘法
np.matmul()a = np.array([[1, 2], [3, 4]]) b = np.array([[2, 0], [0, 2]]) np.matmul(a, b) a @ b # array([[2, 4], # [6, 8]]) -
以下函数对数组中所有数依次运算:
函数 说明 np.sqrt() 开方 np.sin(), np.cos(), np.tan() 三角函数运算 np.log() 自然对数 np.power() 指数 -
广播:
a = np.array([1, 2, 3]) a * 5 # array([5, 10, 15])不同维度的数组也可以进行直接运算
a = np.array([[1], [10], [20]]) b = np.array([0, 1, 2]) a + b # array([[ 1, 2, 3], # [10, 11, 12], # [20, 21, 22]])在运算之前,numpy会将这两个数组扩展至相同的尺寸,然后再将相同位置的元素相加

-
常用函数:
函数 说明 min(), max() 最小值,最大值 argmin(), argmax() 最小值,最大值的索引 sum() 求所有数据的总和 mean() 平均值 median() 中位数 var() 方差 std() 标准差 对于上面的函数,如果数组为多维数组,可以通过指定axis来指定维度:
axis=0时,会将每一行中对应的数据相加,axis=0代表第一个维度,也就是行

a = np.array([[1, 2, 3, 4, 5], [5, 6, 7, 8, 9]]) a.sum() # 所有元素的和 # 50 a.sum(axis=0) # 每行对应数据相加,也就是按列求和 # array([ 6, 8, 10, 12, 14])以此类推,axis=1时代表第二个维度,也就是列

a.sum(axis=1) # 每列对应数据相加,也就是按行求和 # array([15, 35]) -
获取元素
获取元素和python中list用法基本一致
a = np.array([[1, 2, 3], [4, 5, 6]]) # 获取第1行第2列的值 a[0, 1] # a[0][1]同样 # 2同样支持切片
# 获取第一行[0,2)列的数据 a[0, 0:2] # a[0][0:2] # array([1, 2]) # 获取第一行数据 a[0, :] # a[0][:] a[0] # array([1, 2, 3]) # 获取第一行数据,间距为2 a[0, ::2] # array([1, 3]) # 获取第一行数据,倒序,间距为2 a[0, ::-2] # 等同于 a[0, -1:-4:-2] # 倒数第一个到倒数第四个(不包括),间距为2 # array([3, 1]) a[0, 3:0:-2] # 从3到0(不包括0),跨度为2 # array([3]) -
条件筛选指定元素
a = np.arange(10) a # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) a < 2 # array([ True, True, False, False, False, False, False, False, False, # False]) a[a < 2] # array([0, 1])还可以通过逻辑运算符组合不同的条件,需要注意的是,与运算使用“&”,或运算使用“|”
a[(a > 3) & (a % 2 == 0)] # array([4, 6, 8]) a[(a < 5) | (a % 2 == 0)] # array([0, 1, 2, 3, 4, 6, 8])不能使用类似
2 < a < 5这种条件筛选a[(2 < a < 5) | (a % 2 == 0)] # 报错 # ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

浙公网安备 33010602011771号