NumPy是用于数据科学计算的基础模块,不但能够完成科学计算的任务,而且能够被用作高效的多维数据容器,可用于存储和处理大型矩阵。NumPy 的数据容器能够保存任意类型的数据,这使得 NumPy 可以无缝并快速地整合各种数据。NumPy 本身并没有提供很多高级的数据分析功能。理解 NumPy 数组及数组计算有助于更加高效地使用诸如 pandas等数据处理工具。
Python 提供了一个 array 模块。array 和 list 不同,它直接保存数值,和C语言的一维数组比较类似。但是由于 Python 的 array 模块不支持多维,也没有各种运算函数,因此也不适合做数值运算。NumPy 的诞生弥补了这些不足。NumPy 提供了一种存储单一数据类型的多维数组-ndarray。
一、创建数组对象NumPy 提供了两种基本的对象: ndarray( N-dimensionalArray Object)和 ufunc( UniversalFunction Object)。ndarray(下文统一称为数组)是存储单一数据类型的多维数组,而 ufunc则是能够对数组进行处理的函数。
1、数组属性
为了更好地理解和使用数组,在创建数组之前,了解数组的基本属性是十分有必要的。数组的属性及其说明如下表所示。
2、数组创建
NumPy提供的array函数可以创建一维或多维数组,其基本使用格式如下。
numpy.array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0, like=None)
array函数主要参数及其说明如下表。
除了使用array函数创建数组之外,还可以使用arange函数创建数组。arange函数类似于Python自带的函数range,通过指定开始值、终值和步长来创建一维数组,创建的数组不含终值。arange函数的基本使用格式如下。
numpy.arange([start, ]stop, [step, ]dtype=None, *, like=None)
arange函数常用参数及其说明如下表。
linspace函数通过指定开始值、终值和元素个数来创建一维数组,默认设置包括终值,这一点需要和arange函数区分。linspace函数的基本使用格式如下。
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
linspace函数的常用参数及其说明如下表。
logspace函数和linspace函数类似,它创建的是等比数列。logspace函数的基本使用格式如下。
numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0)
在logspace函数的参数中,除了base参数和linspace函数的retstep参数不同之外,其余均相同。
NumPy还提供了其他函数用于创建特殊数组,如zeros、eye、diag和ones函数等。
zeros函数:用于创建值全部为0的数组,即创建的数组值全部填充为0。
eye函数:用于生成主对角线上的元素为1,其他的元素为0的数组,类似单位矩阵。
diag函数:创建类似对角的数组,即除对角线外的其他元素都为0,对角线上的元素可以是0或其他值。
ones函数:用于创建元素全部为1的数组,即创建的数组元素全部填充为1。
3. 数组数据类型
在实际的业务数据处理中,为了更准确地计算结果,需要使用不同精度的数据类型。
NumPy极大程度地扩充了原生Python的数据类型。在NumPy中,所有数组的数据类型是同质的,即数组中的所有元素类型必须是一致的。将元素类型保持一致可以更容易确定该数组所需要的存储空间。
NumPy的基本数据类型及其取值范围如下表。