NumPy介绍

NumPy是用Python进行科学计算的基础包。它本质上就是一个Python库,提供了多维数组对象,各种派生对象(掩码数组和矩阵),一系列快速操作数组的方法。Numpy的核心是ndarray类型,它封装了n维同类型数据构成数组,还有很多相关操作,这些操作的代码是经过编译的,用来提高运算效率。

ndarray类型 vs 标准Python序列类型

ndarray对象创建后其大小/尺寸是固定的,不像列表对象(可以动态增长),如果对ndarray进行大小修改,会创建出一个新的ndarray对象,然后将原来的删除。

ndarray对象中的元素必须要求是同种类型的,从而它们在内存中占用的空间是一样的。

ndarray对象有利于对大量数据进行数学计算和其他操作,通常来说,相比使用Python内置的序列类型,这些操作会更加高效,所需的代码量也更少。

NumPy vs Python vs C

考虑这样一个问题,有两个相同长度的一维数组ab,现在要将它们对应位置上的元素相乘,构成一个新的数组。
使用传统的Python

  1. c = []
  2. for i in range(len(a)):
  3. c.append(a[i] * b[i])
  4. # 想更加有 Python 味道一点,直接用列表推导
  5. c = [a[i] * b[i] for i in range(len(a))]

使用高效率的C

  1. // length 需要告知
  2. double c = (double*)malloc(length * sizeof(double))
  3. for(int i=0; i<length; i++){
  4. c[i] = a[i] * b[i];
  5. }
  6. ...
  7. // c 不再使用了记得 free(c)

如果数组的类型是ndarray,那么,借助NumPy

  1. c = a * b

从代码上看:其中使用原生Python和借助NumPy的两类代码是最简单的,C语言要考虑太多东西了,动态内存分配问题,变量声明和初始化问题……如果问题逻辑再更加复杂一些,C语言编写的代码可读性相对会差很多。从运行效率上看:原生Python的时间主要浪费在向列表中动态添加数据。C语言效率最高肯定没话说,但是NumPy的底层也是用C语言实现的,效率不会相差太多。

综合比较上面三种计算方式,使用NumPy是一种非常靠谱的选择。

  • 代码更加简单易读,与标准的数学计算形式一致,更少的代码意味着更少的错误。
  • 底层的具体细节已经用C语言写好了,优雅却又不失速度。

    NumPy安装

    NumPy的本质就是一个Python包,可以通过pip来进行快速安装。

直接打开终端输入下面的命令:

  1. sudo python3 -m pip install numpy

NumPy介绍及安装 - 图1

安装完成后,可以在交互的解释器环境下测试一下:
NumPy介绍及安装 - 图2