「Python数据科学」为什么说NumPy是必学的核心基础库

南宫理的日志录 2024-12-16 15:34:05
引言

如果要使用Python进行数据科学的相关开发与探索工作,可以有几个不同的方向,比如数据分析、数据挖掘、机器学习、深度学习等,每个方向都有相关的类库。但是,无论从事哪一个领域的开发与研究,有一个库一定是数据科学各个领域都绕不过的核心基础库,就是NumPy。

本文就来简单介绍一下NumPy的相关内容,对NumPy首先有一个全局性的认识,之后才能更好地理解基于NumPy进行科学计算的相关工作机制。

本文的主要内容有:

1、什么是NumPy

2、为什么要学习使用NumPy

3、NumPy的两大核心特性

什么是NumPy

NumPy是Numerical Python的简称,是一个用于科学计算的Python库,提供了多维数组对象、各种派生对象(比如掩码数组和矩阵),以及用于对数组进行快速操作的各种函数,包括:数学运算、逻辑运算、形状操作、排序、选择、IO、离散傅里叶变换、基本线性代数、统计运算、随机模拟等。

可以简单概括为NumPy提供了基于ndarray这个核心的高效存储和操作密集数据缓存的接口。

在某些方面,NumPy与Python内置的列表类型非常相似。但是,随着数组在维度上变大,NumPy数组提供了更加高效的存储和数据操作。

NumPy数组几乎是整个Python数据科学工具生态系统的核心,是许多科学计算和数据科学库(如Pandas、Scikit-learn、TensorFlow、PyTorch等)的基础。

因此,不管是对数据科学的哪个方面感兴趣,花点时间学习如何高效使用NumPy都是非常值得的。

为什么要学习使用NumPy

1、高效的数组操作

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的使用进行逐一介绍。

感谢您的拨冗阅读,希望对您有所帮助!

0 阅读:0

南宫理的日志录

简介:深耕IT科技,探索技术与人文的交集