第一章:NumPy 简介与安装 第一章:NumPy 简介与安装 NumPy(Numerical Python)是 Python 中用于科学计算的基础包。它提供了一个高性能的多维数组对象 ,以及用于处理这些数组的工具。NumPy 是许多其他科学计算库(如 SciPy、Pandas、Scikit-learn 等)的基础。 1.1 NumPy 的核心特性 NumPy 的核心特性包括: ndarray (N-dimensional array object): 一个快速且节省空间的多维数组,可以进行高效的向量化运算。 广播 (Broadcasting): 允许不同形状的数组进行算术运算。
NumPy(Numerical Python)是 Python 中用于科学计算的基础包。它提供了一个高性能的多维数组对象 ndarray,以及用于处理这些数组的工具。NumPy 是许多其他科学计算库(如 SciPy、Pandas、Scikit-learn 等)的基础。
NumPy 的核心特性包括:
ndarray (N-dimensional array object): 一个快速且节省空间的多维数组,可以进行高效的向量化运算。
广播 (Broadcasting): 允许不同形状的数组进行算术运算。
集成 C/C++/Fortran 代码: 可以轻松地将 NumPy 集成到现有的 C/C++/Fortran 代码中,或者将 C/C++/Fortran 代码集成到 NumPy 中。
线性代数、傅里叶变换和随机数生成等功能: 提供了丰富的数学函数库。
简而言之,NumPy 提供了:
向量化运算: 避免显式循环,提高运算速度。
高效的内存使用: ndarray 对象以连续的内存块存储数据,优化了内存访问。
强大的数学工具: 满足科学计算的各种需求。
以下是一个简单的 Mermaid 图,展示 NumPy 在科学计算生态系统中的地位:
与 Python 的列表相比,NumPy 数组在以下方面具有优势:
性能: NumPy 数组的运算速度更快,尤其是在处理大型数据集时。这是因为 NumPy 数组的元素类型是相同的,可以利用向量化运算和底层优化。
内存效率: NumPy 数组占用的内存更少,因为它们以连续的内存块存储数据。
功能: NumPy 提供了丰富的数学函数和工具,可以方便地进行各种科学计算。
NumPy 被广泛应用于以下领域:
科学计算: 物理、化学、生物、工程等领域的数据分析和建模。
数据分析: 数据清洗、转换、统计分析和可视化。
机器学习: 算法开发、模型训练和评估。
图像处理: 图像的读取、处理和分析。
金融分析: 股票价格预测、风险管理等。
NumPy 可以通过多种方式安装,最常用的方法是使用 pip 包管理器。
1.4.1 使用 pip 安装
打开终端或命令提示符,输入以下命令:
pip install numpy
如果你的环境中安装了多个 Python 版本,可能需要使用 pip3 命令:
pip3 install numpy
1.4.2 使用 Anaconda 安装
如果你使用的是 Anaconda 发行版,NumPy 通常已经预装。如果没有,可以使用以下命令安装:
conda install numpy
1.4.3 验证安装
安装完成后,可以在 Python 解释器中导入 NumPy 并查看版本信息,以验证安装是否成功:
import numpy as np print(np.__version__)
如果成功打印出 NumPy 的版本号,则表示安装成功。
1.5.1 导入 NumPy
在使用 NumPy 之前,需要先导入它。通常使用 np 作为 NumPy 的别名:
import numpy as np
1.5.2 创建 NumPy 数组
NumPy 提供了多种创建数组的方式。
import numpy as np # 从列表创建一维数组 arr1 = np.array([1, 2, 3, 4, 5]) print(arr1) # 输出: [1 2 3 4 5] # 从列表创建二维数组 arr2 = np.array([[1, 2, 3], [4, 5, 6]]) print(arr2) # 输出: # [[1 2 3] # [4 5 6]]
import numpy as np # 创建一个全零数组 zeros_arr = np.zeros((2, 3)) # 2行3列的全零数组 print(zeros_arr) # 输出: # [[0. 0. 0.] # [0. 0. 0.]] # 创建一个全一数组 ones_arr = np.ones((3, 2)) # 3行2列的全一数组 print(ones_arr) # 输出: # [[1. 1.] # [1. 1.] # [1. 1.]] # 创建一个指定值的数组 full_arr = np.full((2, 2), 7) # 2行2列,所有元素为7 print(full_arr) # 输出: # [[7 7] # [7 7]] # 创建一个单位矩阵 eye_arr = np.eye(3) # 3x3的单位矩阵 print(eye_arr) # 输出: # [[1. 0. 0.] # [0. 1. 0.] # [0. 0. 1.]] # 创建一个线性序列 arange_arr = np.arange(0, 10, 2) # 从0到10(不包括10),步长为2 print(arange_arr) # 输出: [0 2 4 6 8] # 创建一个指定范围的线性序列 linspace_arr = np.linspace(0, 1, 5) # 从0到1,均匀分布的5个元素 print(linspace_arr) # 输出: [0. 0.25 0.5 0.75 1. ] # 创建一个随机数组 random_arr = np.random.rand(2, 3) # 2行3列的随机数组,元素值在0到1之间 print(random_arr) # 输出: (每次运行结果不同) # [[0.123 0.456 0.789] # [0.987 0.654 0.321]]
1.5.3 数组的属性
NumPy 数组具有许多属性,可以用来获取数组的信息。
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) # 数组的形状 print(arr.shape) # 输出: (2, 3) # 数组的维度 print(arr.ndim) # 输出: 2 # 数组的大小(元素个数) print(arr.size) # 输出: 6 # 数组的数据类型 print(arr.dtype) # 输出: int64 (取决于系统) # 数组的每个元素占用的字节数 print(arr.itemsize) # 输出: 8 (int64占8个字节) # 数组的总字节数 print(arr.nbytes) # 输出: 48 (6个元素 * 每个元素8个字节)
1.5.4 数组的索引和切片
NumPy 数组的索引和切片与 Python 列表类似,但功能更强大。
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6]) # 索引 print(arr[0]) # 输出: 1 print(arr[-1]) # 输出: 6 # 切片 print(arr[1:4]) # 输出: [2 3 4] print(arr[:3]) # 输出: [1 2 3] print(arr[3:]) # 输出: [4 5 6] print(arr[::2]) # 输出: [1 3 5] # 多维数组的索引和切片 arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr2d[0, 0]) # 输出: 1 print(arr2d[1, 2]) # 输出: 6 print(arr2d[0:2, 1:3]) # 输出: # [[2 3] # [5 6]] # 使用布尔索引 bool_arr = arr > 3 print(bool_arr) # 输出: [False False False True True True] print(arr[bool_arr]) # 输出: [4 5 6] # 使用花式索引 fancy_arr = arr[[0, 2, 4]] print(fancy_arr) # 输出: [1 3 5]
1.5.5 数组的运算
NumPy 数组支持各种算术运算,包括加法、减法、乘法、除法等。这些运算都是逐元素进行的。
import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) # 加法 print(arr1 + arr2) # 输出: [5 7 9] # 减法 print(arr2 - arr1) # 输出: [3 3 3] # 乘法 print(arr1 * arr2) # 输出: [ 4 10 18] # 除法 print(arr2 / arr1) # 输出: [4. 2.5 2. ] # 标量运算 print(arr1 + 2) # 输出: [3 4 5] print(arr1 * 3) # 输出: [3 6 9] # 矩阵乘法 arr3 = np.array([[1, 2], [3, 4]]) arr4 = np.array([[5, 6], [7, 8]]) print(arr3 @ arr4) # 输出矩阵乘法 # 输出: # [[19 22] # [43 50]] print(np.dot(arr3, arr4)) # 另一种矩阵乘法写法 # 输出: # [[19 22] # [43 50]]
1.5.6 广播
广播 (Broadcasting) 是 NumPy 的一个强大特性,它允许不同形状的数组进行算术运算。NumPy 会自动扩展较小的数组,使其与较大的数组具有相同的形状。
import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([[4], [5], [6]]) # arr1 的形状是 (3,),arr2 的形状是 (3, 1) # NumPy 会将 arr1 扩展为 (3, 3),将 arr2 扩展为 (3, 3),然后进行加法运算 print(arr1 + arr2) # 输出: # [[5 6 7] # [6 7 8] # [7 8 9]]
1.5.7 其他常用函数
NumPy 提供了许多其他常用的函数,例如:
np.sum():求和
np.mean():求平均值
np.std():求标准差
np.max():求最大值
np.min():求最小值
np.argmax():求最大值的索引
np.argmin():求最小值的索引
np.reshape():改变数组的形状
np.transpose():转置数组
np.concatenate():连接数组
np.unique():去除数组中的重复元素
NumPy 是 Python 中用于科学计算的基础包,它提供了高性能的多维数组对象 ndarray,以及用于处理这些数组的工具。NumPy 具有性能、内存效率和功能等方面的优势,被广泛应用于科学计算、数据分析、机器学习、图像处理和金融分析等领域。通过 pip 或 Anaconda 可以方便地安装 NumPy。掌握 NumPy 的基本使用方法,可以为后续的科学计算和数据分析打下坚实的基础。