NumPy(Numerical Python)是 Python 科学计算的基础包,它是一个开源的 Python 扩展库,用来支持大数据量的高维数组和矩阵运算,比 Python 自身的嵌套列表(该结构也可以用来表示矩阵)结构要高效的多。
NumPy 提供了许多高级的数值编程工具,比如矩阵数据类型、矢量处理、高精度运算等,它专为严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织(比如 Lawrence Livermore、NASA)都使用 NumPy 来处理一些本来使用 C++、Fortran 或 Matlab 等所做的任务。
NumPy 模拟了 MATLAB 的大部分功能,开发 NumPy 库是为了让 Python 也具有和 MATLAB 一样强大的数值计算和科学计算能力。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
实际上 Python 本身含有列表(list)和数组(array),但对于大数据来说,这些结构是有很多不足的。
由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。例如为了保存一个简单的[1,2,3],都需要有 3 个指针和 3 个整数对象。对于数值运算来说,这种结构显然比较浪费内存和 CPU 等宝贵资源。
至于 array 对象,它可以直接保存数值,和C语言的一维数组比较类似。但是由于它不支持多维,在上面的函数也不多,因此也不适合做数值运算。
Numpy 的诞生弥补了这些不足,它提供了两种基本的对象:ndarray(N-dimensional Array Object)和 ufunc(Universal Function Object)。ndarray 是存储单一数据类型的多维数组,而 ufunc 则是能够对数组进行处理的函数。
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
SciPy 是一个开源的 Python 算法库和数学工具包。
SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面,它为利用通用的图形用户界面工具包,如 Tkinter、wxPython、Qt、GTK+ 等向应用程序嵌入式绘图提供了应用程序接口(API)。
在机器学习和深度学习中,图像、声音、文本等输入数据最终都要转换为数组或矩阵。如何有效地进行数组和矩阵的运算?这就需要充分利用Numpy。
Numpy 是数据科学的通用语言,而且与 PyTorch 关系非常密切,它是科学计算、深度学习的基石。尤其对 PyTorch 而言,其重要性更加明显。PyTorch 中的 Tensor 与 Numpy 非常相似,它们之间可以非常方便地进行转换,掌握 Numpy 是学好 PyTorch 的重要基础。