NumPy是一个Python库,专门用于处理数组和矩阵。它能够处理大型的、多维的数组和矩阵,并且提供了大量的数学运算功能。NumPy的名称来源于Numerical Python,意为“数值Python”。与传统的Python列表相比,NumPy数组在执行数组操作时速度更快,内存占用更少,并且使用起来极为方便。NumPy数组还可以指定数据类型,使得在不使用循环和列表推导式的情况下对数组中的单个元素进行操作成为可能。
在系统中安装NumPy非常简单,只需要在命令行中输入以下命令:
pip install numpy
安装完成后,就可以通过以下方式导入NumPy库:
import numpy as np
其中,'np'是NumPy的常用别名,使得可以更方便地引用NumPy包。
有多种方式可以创建NumPy数组,包括将现有的列表或元组转换为数组,或者使用NumPy函数初始化固定长度的数组。以下是一些创建数组的例子:
# 创建一维NumPy数组
arr = np.array([1,2,3,4,5])
# 创建二维数组
arr = np.array([[1,2,3],[4,5,6]])
# 创建全1数组
np.ones(5) # 一维
np.ones((3,5)) # 二维
# 更改数组的默认数据类型
np.ones((5), dtype=np.int) # 创建整数数组
np.ones((5), dtype=np.float) # 创建浮点数数组
# 创建随机数数组
np.random.random([3,4])
# 创建1到100之间步长为5的数组
np.arange(1,100,5)
# 创建1到10之间长度为25的数组
np.linspace(1,10,25)
# 创建特定数值的数组
np.full((3,3), 5)
# 创建重复序列的数组
np.tile([1,2,3], 3)
# 创建单位矩阵
np.eye(3, dtype=int)
# 创建特定范围内的随机整数矩阵
np.random.randint(0, 10, (3,3))
# 创建未初始化的特定形状和数据类型的数组
np.empty([3,3], dtype=int)
# 创建特定形状并填充零的数组
np.zeros([3,3], dtype=int)
可以通过以下方式检查数组的形状、维度、大小和数据类型:
arr = np.array([1,2,3])
arr.shape # 查看数组形状
arr.ndim # 查看数组维度
arr.size # 查看数组大小
np.dtype # 查看数据类型
可以使用reshape方法来改变数组的形状:
arr = np.array([1,2,3,4,5,6,7,8,9])
arr.reshape([3,3]) # 将数组转换为3x3矩阵
NumPy数组支持多种索引方式,包括单个元素索引、切片索引等:
array_1d[2] # 获取第三个元素
array_1d[2:] # 获取从第三个元素开始的所有元素
array_1d[:3] # 获取前三个元素
array_1d[2:7] # 获取从第三个到第七个元素
array_1d[0::2] # 从第一个元素开始,每隔两个元素取一个
数组切片允许提取数组的一部分:
arr = np.array([0,1,2,3,4,5,6,7,8,9,10])
print(arr[:5]) # 输出前五个元素
print(arr[5:]) # 输出从第六个元素到最后
print(arr[4:10:2]) # 输出从第五个到第十个,每隔一个元素取一个
可以使用concatenate函数来连接数组:
# 沿着行连接
arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
arr = np.concatenate((arr1,arr2),axis=0)
# 沿着列连接
arr1 = np.array([[1,1,1],[1,1,1]])
arr2 = np.array([[9,9,9],[9,9,9]])
arr = np.concatenate((arr1,arr2),axis=1)
堆叠与连接类似,但是沿着一个新的轴进行:
# 水平堆叠
arr1 = np.array([0,0])
arr2 = np.array([1,1])
arr = np.hstack((arr1,arr2))
# 垂直堆叠
arr1 = np.array([0,0])
arr2 = np.array([1,1])
arr = np.vstack((arr1,arr2))
可以使用sort函数对数组进行排序:
arr = np.array([3,2,0,1])
print(np.sort(arr))
NumPy提供了丰富的数组操作功能,包括加法、减法、乘法、幂运算等:
array_1 + array_2 # 数组加法
np.array([0,1]) + np.array([2,3]) # 示例
array_1 - array_2 # 数组减法
np.array([0,1]) - np.array([2,3]) # 示例
array_1 * array_2 # 数组乘法
np.array([0,1]) * np.array([2,3]) # 示例
some_array ** n # 幂运算
np.array([0,1])**2 # 平方
np.array([1,2]) ** 1.2 # 1.2次幂
np.sin(some_array) # 正弦函数
np.cos(some_array) # 余弦函数
np.tan(some_array) # 正切函数
np.exp(some_array) # 指数函数
np.log(some_array) # 对数函数
A = np.array([
[6, 1, 1],
[4, -2, 5],
[2, 8, 7]
])
print(np.linalg.matrix_rank(A)) # 矩阵秩
print(np.trace(A)) # 矩阵迹
print(np.linalg.det(A)) # 矩阵行列式
print(np.linalg.inv(A)) # 矩阵逆
print(np.linalg.matrix_power(A, 3)) # 矩阵的三次幂
eigen_val, eigen_vec = np.linalg.eig(some_array) # 计算特征值和特征向量