第4章 NumPy基础:数组和矢量计算
NumPy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。它是本书所介绍的几乎所有高级工具的构建基础。其部分功能如下:
·ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
·用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
·用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
·线性代数、随机数生成以及傅里叶变换功能。
·用于集成由C、C++、Fortran等语言编写的代码的工具。
最后一点也是从生态系统角度来看最重要的一点。由于NumPy提供了一个简单易用的C API,因此很容易将数据传递给由低级语言编写的外部库,外部库也能以NumPy数组的形式将数据返回给Python。这个功能使Python成为一种包装C/C++/Fortran历史代码库的选择,并使被包装库拥有一个动态的、易用的接口。
NumPy本身并没有提供多么高级的数据分析功能,理解NumPy数组以及面向数组的计算将有助于你更加高效地使用诸如pandas之类的工具。如果你是Python新手,而且只是想用pandas随便处理一下数据就行,那就跳过本章吧,没关系的。更多NumPy高级功能(比如广播),请参见第12章。
对于大部分数据分析应用而言,我最关注的功能主要集中在:
·用于数据整理和清理、子集构造和过滤、转换等快速的矢量化数组运算。
·常用的数组算法,如排序、唯一化、集合运算等。
·高效的描述统计和数据聚合/摘要运算。
·用于异构数据集的合并/连接运算的数据对齐和关系型数据运算。
·将条件逻辑表述为数组表达式(而不是带有if-elif-else分支的循环)。
·数据的分组运算(聚合、转换、函数应用等)。第5章将对此进行详细讲解。
虽然NumPy提供了这些功能的计算基础,但你可能还是想将pandas作为数据分析工作的基础(尤其是对于结构化或表格化数据),因为它提供了能使大部分常见数据任务变得非常简洁的丰富高级接口。pandas还提供了一些NumPy所没有的更加领域特定的功能,如时间序列处理等。
注意: 在本章以及本书中,我将依照标准的NumPy约定,即总是使用import numpy as np。当然,你也可以为了不写np.而直接在代码中使用from numpy import *,但我得提醒你最好还是不要养成这样的坏习惯。