如果要使用Python进行数据科学的相关开发与探索工作,可以有几个不同的方向,比如数据分析、数据挖掘、机器学习、深度学习等,每个方向都有相关的类库。但是,无论从事哪一个领域的开发与研究,有一个库一定是数据科学各个领域都绕不过的核心基础库,就是NumPy。
本文就来简单介绍一下NumPy的相关内容,对NumPy首先有一个全局性的认识,之后才能更好地理解基于NumPy进行科学计算的相关工作机制。
本文的主要内容有:
1、什么是NumPy
2、为什么要学习使用NumPy
3、NumPy的两大核心特性
什么是NumPyNumPy是Numerical Python的简称,是一个用于科学计算的Python库,提供了多维数组对象、各种派生对象(比如掩码数组和矩阵),以及用于对数组进行快速操作的各种函数,包括:数学运算、逻辑运算、形状操作、排序、选择、IO、离散傅里叶变换、基本线性代数、统计运算、随机模拟等。
可以简单概括为NumPy提供了基于ndarray这个核心的高效存储和操作密集数据缓存的接口。
在某些方面,NumPy与Python内置的列表类型非常相似。但是,随着数组在维度上变大,NumPy数组提供了更加高效的存储和数据操作。
NumPy数组几乎是整个Python数据科学工具生态系统的核心,是许多科学计算和数据科学库(如Pandas、Scikit-learn、TensorFlow、PyTorch等)的基础。
因此,不管是对数据科学的哪个方面感兴趣,花点时间学习如何高效使用NumPy都是非常值得的。
为什么要学习使用NumPy1、高效的数组操作
NumPy的核心是多维数组(ndarray),它比Python原生的列表在性能上更高效,特别是在进行大规模的数据操作时。
2、内存效率
NumPy数组在内存中是连续的,使用相同的数据类型,这使得它们比Python列表更节省内存。
3、丰富的数学函数库
NumPy提供了多种数学函数,支持数组的数学运算(如加法、减法、乘法、除法等),以及线性代数、傅里叶变换等高阶数学运算。
4、支持广播和向量化
NumPy支持广播(broadcasting)和向量化(vectorization),使得在数组上进行操作变得简单且高效,避免了显式循环。
5、与其他库的兼容性
NumPy是许多科学计算、数据分析和机器学习等库的基础,使其在Python生态系统中得到了广泛应用。
NumPy的两大核心特性刚接触NumPy的新手,或者已经习惯了Python内置的列表形式的数组操作的同学,对NumPy的两大核心特性:向量化和广播,可能会比较陌生。这里,分别就这两个特性通过具体代码进行简单比较演示。
需要说明的是,如果没有使用过NumPy,可以先忽视具体的语法,后续会一一展开介绍。
1、向量化
向量化(vectorization)是指将操作应用于整个数组(或者多个数组)而不是逐个元素(element-by-element)的操作过程。这种方式通常比使用显式的循环(for loop)效率更高,而且代码更加简洁。当然,之所以能够做到这些,是因为NumPy内部使用了优化的、预编译好的C代码来实现。
通过代码来直观感受下向量化,首先是for loop形式的Python 列表操作,代码如下:
可以看到,两个NumPy数组相加,自动实现了数组中对应位置的每个元素各自相加,避免了繁琐的for循环样板代码。
2、广播
广播(broadcasting)是NumPy的另一种强大特性,是用于描述操作的隐式逐元素行为的术语,使得不同形状的数组能够进行数学运算。
在NumPy中,进行操作的两个操作数,可以是相同形状的数组,可以是数组和标量,也可以是不同形状的数组(前提是小数组能够自动扩展为大数组的形式,从而避免广播操作产生歧义)。
同样以代码举例说明:
可以看到,NumPy数组乘以一个标量,自动进行广播至每个元素乘以该标量。广播的效果如下图所示:
总结本文简单介绍了NumPy是什么,以及为什么从事数据科学的开发与研究,有必要花时间认真学习NumPy的高效使用,介绍了NumPy的一些核心特性,并通过代码着重演示了向量化和广播两个特性。希望通过这些内容的介绍,能够对NumPy有个全局性的认识,在后续的文章中将对NumPy的使用进行逐一介绍。
感谢您的拨冗阅读,希望对您有所帮助!