第六章. 图解数组计算模块NumPy
数组中对应位置的元素进行加减乘除,幂运算。
n1 = np.array([1, 2])
n2 = np.array([3, 4])
# 加
n = n1 + n2
# 减
n = n1 - n2
# 乘
n = n1 * n2
# 除
n = n1 / n2
# 幂运算
n = n1 ** n2
数组中对应位置元素的比较运算,比较后的结果是布尔值数组。
n1 = np.array([1, 2])
n2 = np.array([3, 4])
# 比较运算
n = n1 >= n2
n = n1 <= n2
n = n1 == n2
n = n1 != n2
标量是一个单独的数,向量是一组顺序排列的数,数组的标量运算可以理解成向量与标量之间的运算。
n1 = np.array([1, 2])
# 标量运算
n = n1 / 1.5 # 运用到了广播机制
NumPy数组元素是通过数组的索引和切片来访问和修改的。
即用于标记数组当中对应元素的唯一数字,索引从0开始
# 一维数组的索引
n1 = np.array([1, 2])
n = n1[0]
n2 = np.array([[1, 2], [3, 4]])
# 二维数组的索引(两种方式等效)
n = n2[0][0]
n = n2[0, 0]
对数组进行分割,NumPy中的切片用冒号分隔开
·语法:[start:stop:step]
,start:起始索引,stop:终止索引,step:步长
# 一维数组的切片
n1 = np.arange(0, 10, 1)
n = n1[0:5:2]
n = n1[2:]
n = n1[:5]
n = n1[-3:-1]
# 二维数组的切片
n1 = np.random.randint(10, size=(3, 3))
n = n1[:2, 1:] # 输出第一行到第三行(不包含第三行)的第二列至最后一列的元素
n = n1[1, :2] # 输出第二行的第一列至最后一列(不包含最后一列)的元素
n = n1[:2, 2] # 输出第一行到第三行(不包含第三行)的第三列元素
n = n1[:, :1] # 输出所有行的第一列元素
·切片式索引操作的注意事项:
·索引是左闭右开区间的
·当没有start参数时,代表从索引0开始
·start,stop,step 3个参数都可以是负数,代表反向索引
数组重塑就是更改数组的形状,主要使用NumPy中的reshape函数
# 整数
n1 = np.arange(0, 10, 1)
n = n1.reshape(2, 5)
# 字符串
n1 = np.array(
['云', '想', '衣', '裳', '花', '想', '容', ',',
'春', '风', '拂', '槛', '露', '华', '浓', ',',
'若', '非', '群', '玉', '山', '头', '见', ',',
'会', '向', '瑶', '台', '月', '下', '逢', '。'])
n = n1.reshape(4, 8)
n1 = np.random.randint(10, size=(3, 4))
n = n1.reshape(4, 3)
数组转置是指数组的行列转换,可以使用数组的T属性和transpose函数实现
# 使用数组的T属性实现
n1 = np.arange(24).reshape(4, 6)
n = n1.T
# 使用transpose函数实现
n = n1.transpose()
数组的增加可以按照水平方向增加(主要使用numpy.hstack函数),也可以按照垂直方向增加(主要使用numpy.vstack函数)
n1 = np.arange(6).reshape(2, 3)
n2 = np.arange(6).reshape(2, 3)
n = np.hstack((n1, n2))
n = np.vstack((n1, n2))
数组的删除主要使用numpy.delete函数
n1 = np.arange(6).reshape(3, 2)
n = np.delete(n1, 1, axis=0) # 删除第二行
n = np.delete(n1, 0, axis=1) # 删除第一列
n = np.delete(n1, (1, 2), axis=0) # 删除第二行和第三行
n = np.delete((np.delete(n1, (1, 2), axis=0)), 1, axis=1) # 删除第二行和第三行和第二列元素
当修改数组元素时,直接为其赋值即可。
n1 = np.arange(6).reshape(2, 3)
n1[1] = [6, 7, 8]
n1[0][1] = 66
数组的查询可以使用索引或切片来获取数组元素,也可以通过numpy.where函数来查询符合条件的元素。
n1 = np.arange(6)
n = np.where(n1 >= 3, 10, 0) # 满足条件,输出10,不满足条件,输出0
n = n1[np.where(n1 >= 3)] # 输出满足条件的数组元素