NumPy

NumPy 是一个免费的开源Python库,用于n维数组处理和数值计算。

NumPy是什么

Numpy 是使用 Python 进行科学计算的基础包,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种例程,包括数学、逻辑、形状操作、排序、选择、I/O 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。

NumPy 强大、优化、免费

NumPy 表示“numerical Python”,它建立在库Numeric 和 Numarray 早期工作之上,旨在为 Python 提供快速的数值计算。 如今,NumPy 拥有众多贡献者,并由 NumFOCUS 赞助。

作为科学计算的核心库,NumPy 是 Pandas、Scikit-learn 和 SciPy 等库的基础。 它广泛用于在大型数组上执行优化的数学运算。

为何选择 NumPy

  • 多维数组ndarray是 NumPy 库的中心数据结构,是一个齐次的n维数组对象,封装了同构的元素或项的集合。 在这些 ndarray 中,每个条目都包含相同大小的内存块,并且每个块的标识方式相同。 这使得科学计算的数据能够高效、快速和轻松地处理。

  • NumPy 数组操作比 Python 列表更快,因为 NumPy 数组是同类数据类型的编译,并且密集存储在内存中。 而Python 列表list可以有不同的数据类型,在对它们执行计算时对系统施加额外的约束。

    • 与python list不通,创建Ndarray是使用固定的大小。 改变ndarray的大小会创建新的数组并删除原来的。
    • Numpy数组元素要求具有相同的数据类型,进而在内存中具有相同的大小。(例外,也可以是python对象数组,这样是不通大小元素构成的ndarray数组)
    • NUmpy对大量数据的高级数学运算和其他操作提供了帮助、对比与python代码的实现方式,可以更有效率、代码更简练
    • 更多的python科学计算和数学计算库基于numpy提供的功能。虽然这些库也会支持python list的输入,但是在处理前,都会将他们转化位Numpy 数组,这些库的输出也大部分是numpy数组。换句话说,如果想有效的使用今天众多的基于python语言的科学/数学库,仅仅知道如何使用python的内建的序列类型是不充分的、学习使用numpy数组是必须的功课
  • 可以和C/C++ 和 Fortran 代码集成的工具

  • 好用的线性代数、傅立叶变换、和随机数生成等功能

  • 矢量化代码

    • 矢量化代码更精简、可读性更高
    • 更少的代码通常意味着更少的bug
    • 更接近于标准数学符号(可以更简单的正确编写数学构造的代码)
    • 矢量化操作的结果更具“pythonic”风格、如果没有矢量化运算,我们的代码会充斥着大量低效和难于阅读的for循环。
  • Universal functions,通用函数(或简称 ufunc)是以逐个元素的方式对 ndarray 进行操作的函数,支持数组广播、类型转换和其他几个标准特性。 也就是说,ufunc 是一个函数的“矢量化”包装器,它接受固定数量的特定输入并产生固定数量的特定输出。

  • 非常友好的 BSD license

NumPy 重要性

对于进行探索性数据分析以及模型构建的数据科学家来讲、需要高效代码,也需要快速实现,这就需要Numpy提供的混合python的良好可用性和C语言级别优化的能力特性。事实上,对于算法的快速原型构建在今天的科学计算体系中成功与否、与这种混合快速和C优化的能力特性息息相关。Numpy已经成为在python中进行多维数据交互的事实标准。

相关网站