什么是向量化?

2025年1月7日 | 阅读 4 分钟

引言

向量化是一种强大的 Python 方法,在数值计算和科学计算领域尤为重要。向量化是指在单个操作中对整个数组或数据向量执行操作,而不是显式使用循环。由于该技术依赖于低级、优化的数学运算实现,因此能带来巨大的速度提升。

为何要进行向量化?

  1. 性能:通常,向量化操作比基于循环的类比操作快得多,因为向量化代码执行的是优化过的、编译过的代码——可能是用 C 或 Fortran 编写的——而解释型 Python 代码的执行频率要低得多。
  2. 简洁性:向量化可以使代码更易读、更紧凑。对整个数组进行的操作以一种反映数学符号的方式表达,增强了代码的可读性。
  3. 内存效率:向量操作可能更节省内存。它们减少了重复函数调用的开销,在某些情况下,可以少用临时变量。

支持向量化的关键库

Python 中的向量化主要由一些专门用于处理数值和科学计算任务的核心库提供支持。这些库提供了执行数组或矩阵整体操作的基础,采用优化的低级实现。以下是最支持向量化的主要库:

1. SciPy

SciPy(科学计算 Python)通过提供一套用于科学和技术计算的算法和高级指令来扩展 NumPy。

核心功能

  • 用于优化、积分、插值、特征值问题、统计等应用的模块。
  • 用于线性代数、微分方程和信号处理的高级函数。
  • 使用 NumPy 数组来组织数据并提高处理性能。

示例

输出

What is Vectorization?

说明

  • 此代码在 0 到 1 之间对函数 x2 进行积分。
  • integrate.quad 函数执行积分。
  • lambda x: x**2 部分定义了函数 x2。
  • 'Result' 是积分的值。
  • 它打印结果,约为 0.333。

2. CuPy

CuPy 是一个用于在 NVIDIA GPU 上实现 NumPy 兼容的多维数组的包。它通过类似 NumPy 的 API 提供 GPU 加速计算。

核心功能包括:

  • 支持大多数带有 GPU 加速的 NumPy 函数。
  • 在 CPU 和 GPU 之间交换数据的简单接口。
  • 兼容 CUDA(Compute Unified Device Architecture),用于创建自定义 GPU 内核。

示例

输出

What is Vectorization?

说明

  • 此代码在 NVIDIA GPU 上执行数组操作。
  • cp.array 创建 GPU 数组。
  • 在 GPU 上,操作 a + b 对两个数组的元素逐个相加。
  • 它输出值 [6, 8, 10, 12]。

    3. Dask

    Dask 是一个并行计算包,可在多核设备和分布式集群上运行 Python 程序。它通过并行和分布式计算功能增强了 NumPy 和 Pandas。

    核心功能包括:

    示例

    输出

    说明

    4. Pandas

    Pandas 是一个建立在 NumPy 之上的数据操作和分析包。它提供了用于数据分析的高级数据结构和工具,尤其适用于表格数据(数据帧)。

    核心功能包括:

    示例

    输出

    What is Vectorization?

    说明

    5. NumPy

    NumPy(数值 Python)是 Python 中数值计算的基础包。它支持大型、多维数组和矩阵,以及用于操作这些数组的各种数学函数。

    核心功能包括:

    示例

    输出

    说明

    结论

    向量化是 Python 中高效数值和科学计算的核心。通过使用 NumPy 和 Pandas 等库,Python 开发者可以实现更简洁、更易读、性能更高效的代码。无论您是在进行数据分析、训练机器学习模型还是图像处理,向量化都提供了大量功能来加快您的计算速度。


     
      • 扩展 NumPy 和 Pandas 的并行数组、数据帧和列表。
      • 并行计算中的任务调度和执行。
      • 可从单台机器扩展到大规模集群。
      • 此代码利用 Dask 来并行处理大型数组。
      • da.from_array 将 NumPy 数组分成小块并转换为 Dask 数组。
      • a + b 对 Dask 数组执行逐元素加法。
      • result.compute() 计算并返回最终值,[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]。
      • 用于管理表格和时间序列数据的 DataFrame 和 Series 对象。
      • 过滤、分组、合并和重塑都是非常强大的数据操作技术。
      • 用于处理缺失数据、数据对齐和时间序列特定功能的向量化过程和函数。
      • 与其他库(如 Matplotlib)集成,用于绘图和可视化。
      • 此代码生成并操作表格数据。
      • pd.DataFrame(data) 从字典构建 DataFrame。
      • df['C'] = df['A'] + df['B'] 创建一个新列 C,它是列 A 和 B 的总和。
      • 它输出包含列 A、B 和 C 的 DataFrame。
      • 多维数组对象 (array)。
      • 用于执行逐元素操作、线性代数、生成随机数等的函数。
      • 广播功能,可用于对不同形状的数组执行操作。
      • 与 C/C++ 和 Fortran 程序集成,以获得最佳性能。
      • 此代码处理基本的数组操作。
      • np.array 创建 NumPy 数组。
      • a + b 是两个数组的逐元素加法。
      • 它输出值 [6, 8, 10, 12]。



    •