Python数据分析 | (5)初识NumPy

本篇博客所有示例使用Jupyter NoteBook演示。

Python数据分析系列笔记基于:利用Python进行数据分析(第2版)  

目录

1.NumPy简介

2.NumPy数据分析

3.NumPy高效性


1.NumPy简介

NumPy(Numerical Python的简称)是Python数值计算最重要的基础包。大多数提供科学计算的包都是用NumPy数组作为构建基础。

NumPy部分功能:

  •  ndarray,一个具有矢量运算和复杂广播能力的快速且节省空间的多维数组
  • 提供对整个数组数据进行快速运算的标准数学函数  (不需要编写循环)
  • 提供读写磁盘数据的工具以及用于操作内存映射文件的工具
  • 线性代数、随机数生成以及傅立叶变换功能
  • 用于集成由C、C++、Fortran等语言编写的代码的A C API

由于NumPy提供了一个简单易用的C API,因此很容易将数据传递给由低级语言编写的外部库,外部库也能以NumPy数组的形式将数据返回给Python。这个功能使Python成为一种包装C/C++/Fortran历史代码库的选择,并使被包装库拥有一个动态的、易用的接口。

2.NumPy数据分析

NumPy本身并没有提供很多高级的数据分析功能,理解NumPy数组以及面向数组的计算将有助于我们更加高效地使用诸如pandas之类的工具。因为NumPy是一个很大的知识点,在Python数据分析系列中我们会分多篇博客/主题进行系统的介绍。

对于大部分数据分析应用而言,最关注的功能集中在:

  • 用于数据整理和清洗、子集构造和过滤、转换等快速的矢量化数组运算
  • 常用的数组算法,如排序、唯一化、集合运算等
  • 高效的描述统计和数据聚合/摘要运算
  • 用于异构数据集的合并/连接运算的数据对齐和关系型数据运算
  • 将条件逻辑表述为数组表达式(而不是带有if-elif-else分支的循环)
  • 数据的分组运算(聚合、转换、函数应用等)

虽然NumPy提供了通用的数值数据处理的计算基础,但是我们还是将pandas作为统计和分析工作的基础,尤其是处理表格数据时。pandas还提供了一些NumPy所没有的特定功能,如时间序列处理等。

Python的面向数组计算可以追溯到1995年,Jim Hugunin创建了Numeric库。接下来的10年,许多科学编程社区纷纷开始使用Python的数组编程,但是进入21世纪后,库的生态系统变得碎片化了。2005年,Travis Oliphant从Numeric和Numarray项目整合出了NumPy项目,进而所有社区都集合到了这个框架下。

3.NumPy高效性

NumPy之于数值计算特别重要的原因之一,是因为他可以高效处理大数组的数据,因为:

  • NumPy是在一个连续的内存块中存储数据,独立于其他Python内置对象。NumPy的C语言编写的算法库可以操作内存,而不必进行类型检查或其他前期工作。比起Python的内置序列(列表,元组、集合等),NumPy数组使用的内存更少。
  • NumPy可以在整个数组上执行复杂的计算,矢量化运算,而不需要Python的for循环。

基于NumPy的算法要比纯Python快10-100倍(甚至更多),并且使用的内存更少。下面用一个例子,来查看2者具体的性能差距:

import numpy as np

arr = np.arange(1000000)  #声明一个包含1000000个元素的数组  0-999999
list1 = list(range(1000000)) #声明一个包含1000000个元素的列表  0-999999   range()产生一个迭代器 使用list()对其进行实体化

%time for _ in range(10): arr1 = arr*2   #向量化运算不需要for循环 对数组中的每个元素乘以2
%time for _ in range(10): list2 = [x*2 for x in list1]  #对列表中的每个元素乘以2  需要使用for循环

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值