Numpy基础:数组与向量化计算

Numpy,是Numerical Python的简称,它是目前Python数值计算中最为重要的基础包。大多数计算包都提供了基于Numpy的科学函数功能,将Numpy的数组对象作为数据交换的通用语。Numpy中会出现以下内容:

  • ndarray,一种高效多维数组,提供了基于数组的便捷算术操作以及灵活的广播功能。
  • 对所有数据进行快速的矩阵计算,而无需编写循环程序。
  • 对硬盘中数组数据进行读写的工具,并对内存映射文件进行操作。
  • 线性代数、随机数生成以及傅里叶变换功能。
  • 由于连接Numpy到C/C++/Fortran代码库进行封装,并为这些代码提供动态、易用的接口。

Numpy本身并不提供建模和科学函数,理解Numpy的数组以及基于数组的计算将帮助你更高效地使用基于数组的工具,比如pandas。在大多数的数据分析应用中,我们将关注以下内容:

  • 在数据处理、清洗、构造子集、过滤、变换以及其他计算中进行快速的向量化计算。
  • 常见的数组算法,比sortunique以及set操作等。
  • 高效的描述性统计和聚合/概述数据。
  • 数据排列和相关数据操作,例如对异构数据进行mergejoin
  • 使用数组表达式来表明条件逻辑,替代if-elif-else条件分支的循环。
  • 分组数据的操作(聚合、变换以及函数式操作)。

虽然Numpy提供了数值数据操作的计算基础,但是在大多情况下还是Pandas作为统计、分析的基石,尤其是针对表格数据。Pandas提供了更多的针对特定场景的函数功能,例如时间序列操作等Numpy并不包含的功能。

Numpy之所以如此重要,其中一个原因就是它的设计对于含有大量数组的数据非常有效。除此之外还有以下原因:

  • Numpy在内部将数据存储在连续的内存块上,这与其他的Python内建数据结构是不同的。Numpy的算法库是用C语言写的,所以在操作数据内存时,不需要任何类型检查或者其他管理操作。Numpy数组使用的内存量也小于其他Python内建序列。
  • Numpy可以针对全量数组进行复杂计算而不需要写Python循环

假设一个Numpy数组包含100万个整数,还有一个同样数据内容的Python列表:

import numpy as np

my_arr = np.arange(1000000)
my_list = list(range(1000000))

现在我们同时对每个序列乘以2:

%time for _ in range(10):my_arr2 = my_arr * 2
Wall time: 45.4 ms

%time for _ in range(10):my_list2 = [x * 2 for x in my_list]
Wall time: 2.3 s

使用Numpy方法比Python方法要快10到100倍,并且使用的内存也更少。

猜你喜欢

转载自blog.csdn.net/qq_41205111/article/details/86596110
今日推荐