NumPy介绍
NumPy
是用Python
进行科学计算的基础包。它本质上就是一个Python
库,提供了多维数组对象,各种派生对象(掩码数组和矩阵),一系列快速操作数组的方法。Numpy
的核心是ndarray
类型,它封装了n维同类型数据构成数组,还有很多相关操作,这些操作的代码是经过编译的,用来提高运算效率。
ndarray类型 vs 标准Python序列类型
ndarray
对象创建后其大小/尺寸是固定的,不像列表对象(可以动态增长),如果对ndarray
进行大小修改,会创建出一个新的ndarray
对象,然后将原来的删除。
ndarray
对象中的元素必须要求是同种类型的,从而它们在内存中占用的空间是一样的。
ndarray
对象有利于对大量数据进行数学计算和其他操作,通常来说,相比使用Python
内置的序列类型,这些操作会更加高效,所需的代码量也更少。
NumPy vs Python vs C
考虑这样一个问题,有两个相同长度的一维数组a
和b
,现在要将它们对应位置上的元素相乘,构成一个新的数组。
使用传统的Python
:
c = []
for i in range(len(a)):
c.append(a[i] * b[i])
# 想更加有 Python 味道一点,直接用列表推导
c = [a[i] * b[i] for i in range(len(a))]
使用高效率的C
:
// length 需要告知
double c = (double*)malloc(length * sizeof(double))
for(int i=0; i<length; i++){
c[i] = a[i] * b[i];
}
...
// c 不再使用了记得 free(c)
如果数组的类型是ndarray
,那么,借助NumPy
:
c = a * b
从代码上看:其中使用原生Python
和借助NumPy
的两类代码是最简单的,C
语言要考虑太多东西了,动态内存分配问题,变量声明和初始化问题……如果问题逻辑再更加复杂一些,C
语言编写的代码可读性相对会差很多。从运行效率上看:原生Python
的时间主要浪费在向列表中动态添加数据。C
语言效率最高肯定没话说,但是NumPy
的底层也是用C
语言实现的,效率不会相差太多。
综合比较上面三种计算方式,使用NumPy
是一种非常靠谱的选择。
- 代码更加简单易读,与标准的数学计算形式一致,更少的代码意味着更少的错误。
- 底层的具体细节已经用
C
语言写好了,优雅却又不失速度。NumPy安装
NumPy
的本质就是一个Python
包,可以通过pip
来进行快速安装。
直接打开终端输入下面的命令:
sudo python3 -m pip install numpy
安装完成后,可以在交互的解释器环境下测试一下: