Numpy:数组和矢量计算包
对于大部分数据分析工具,作者主要关注如下功能
- 快速矢量化矩阵运算,用于数据规整化和清理,筛选,过滤,格式转换等
- 常用矩阵算法,排序、唯一值和集合运算
- 高效描述性统计和聚合分析
- 数据对准,和关联数据操作,从而便于合并不同类型的数据集
- 避免使用if-elif-else和loops进行逻辑判断
- 分组数据操作
而Numpy的部分功能如下:
- ndarray, 一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组
- 用于对整组数据进行快速运算的标准数学函数(无需编写循环函数)
- 用于读写磁盘数据的工具以及用于操作内存映射文件的工具
- 线性代数, 随机数生成以及傅里叶变换功能
- 用于继承由C, C++, Fortran等语言编写的代码的工具
尽管Numpy并不满足作者的所有需求,但是熟练掌握的Numpy的面向数组编程(arrary-oriented programming),以数组的方式思考对成为Python数据分析科学家至关重要。
ndarray: 多维数组对象,高效的源头
Python低效的原因有一个就是“在Python里面一切都是对象”,所以它不存在基本数据类型,每次运算都要进行类型判断会降低了效率。而Numpy将数据存放在连续的内存块中,Numpy处理这部分内存块就不需要进行类型检查了。并且Numpy的矢量化运算,避免了Python原生for循环,效率再次提高。
举例说明:
import numpy as np
raw_arr = list(range(10000))
np_arr = np.arange(10000)
%%timeit
raw_arr2 = [x * 2 for x in raw_arr]
# 时间是349 us += 2.83 us
%%timeit
np_arr2 = np_arr * 2
# 时间是6.94 us += 33.5 ns
速度相差了50倍。
注:Java作为一门面向对象语言,保留了8种基本数据类型(不包括字符串)。
ndarrays的思维导图: