利用Python进行数据分析 第4章 NumPy基础-数组与向量化计算(3)
4.2 通用函数:快速的元素级数组函数
通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。
1)一元(unary)ufunc,如,sqrt和exp函数
2)二元(unary)ufunc,可接受2个数组,并返回一个结果数组,如add或maximum函数
3)部分ufunc可返回多个数组,如modf,是Python内置函数divmod的矢量化版本,可返回浮点数数组的整数部分和小数部分:
4)Ufuncs可以接受一个out可选参数,这样就能在数组原地进行操作。
列举部分一元和二元ufunc
4.3 利用数组进行数据处理
numpy提供的numpy.meshgrid()函数可以让我们快速生成坐标矩阵X,Y。
语法:X,Y = numpy.meshgrid(x, y)
输入的x,y,就是网格点的横纵坐标列向量(非矩阵)
输出的X,Y,就是坐标矩阵。
(1)将条件逻辑表述为数组运算 - Numpy.where函数
numpy.where函数是三元表达式 x if condition else y 的矢量化版本。numpy.where(condition, result1, reult2),如果condition为真值,则输出result1,如果condition为False值,则输出result2。示例:
假设我们有如上一个布尔数组和两个值数组,现根据cond中的值选取xarr和yarr值,也即:当cond中为True时,选取xarr的值,否则从yarr中选取。
Ps:在数据分析工作中,where通常用于根据一个数组生成一个新数组。
如,希望将一个由随机数据组成的矩阵中,所有的正值替换为2,所有负值替换为-2,则实现如下:
此外,np.where 可以将标量和数组结合使用,如仅将arr中的正值替换为2,其余保持不变:
(2)数学和统计方法
可通过数组上的一组数学函数,对整个数组或某个轴向的数据进行统计计算。sum、mean及标准差std等聚合计算(aggreation,通常叫约简-reduction)既可当作数组的实例方法调用,也可以当作顶级NumPy函数使用。
Ps:mean和sum这类函数可接受一个axis选项参数,用于计算该轴向上的统计值,最终结果是一个少一维的数组。
关于NumPy数组轴的理解,参见:https://www.cnblogs.com/ElonJiang/p/11626851.html
arr.mean(axis = 1) 是指沿列方向折叠聚合求每一行的平均值;
arr.sum(axis = 0) 是指沿行方向折叠聚合求每一列的和。
arr.cumsum和arr.cumprod分别用于求所有元素的累计和,以及累计积。同样适用于多维数组:
列出全部的基本数组统计方法:
(3)用于布尔型数组的方法
1)布尔型数组中的sum方法
在上面(2)所列出的方法中,布尔值会被强制转换为1(True)和0(False),故,sum经常被用来对布尔型数组中的True值计数:
2)布尔型数组中的any和all方法
any用于测试数组中是否存在一个或多个True;all用于检查数组中所有值是否都是True
Ps:any和all方法也可用于非布尔类型数组,所有非0元素将会被当作True。
(4)排序
NumPy数组,跟Python内置的列表类型一样,可以通过sort方法就地排序。
一维数组:
多维数组(可在任何一个轴向进行排序,只需将轴编号传给sort即可):
Ps:顶级方法 np.sort()返回的是数组的已排序副本,但前述arr.sort()是就地排序会修改数组本身。
排序的经典应用:
计算数组分位数,最简单方法是对数组进行排序,然后取特定位置的值即可,示例如下。
(5)唯一化及其他的集合逻辑
NumPy提供了一些针对一维ndarray的基本集合运算。
1)np.unique,最常用的基本集合运算方法,用于找出数组中的唯一值并返回已排序的结果。
2)np.in1d,用于测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组。
NumPy中的集合函数:
4.4 用于数组的文件输入输出
NumPy能够读写磁盘上的文本数据或二进制数据,此处仅学习NumPy的内置二进制格式(通常更多用户会使用pandas或其他加载文本或表格数据,见第6章)
(1)np.save和np.load函数
np.save函数,用于在磁盘上写入数组数据,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npy的文件中。
np.load函数,用于从磁盘上读取数组数据。
(2)np.savez函数
np.savez函数,可将多个数组保存到一个未压缩的文件中,将数组以关键字参数的形式传入即可。
加载 .npz文件时,会得到一个类似字典的对象,该对象会对各个数组进行延迟加载。
4.5 线性代数(不完整,待需要之时深入学习)
线性代数,如矩阵乘法、矩阵分解、行列式以及其他方阵数学等,是任何数组库的重要组成部分。
(1)矩阵乘法numpy.dot函数,既是一个数组方法,也是numpy命名空间中的一个函数
x.dot(y) 等价于 np.dot(x, y)
numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的函数,常用的numpy.linalg列出如下:
该部分涉及较多线性代数的数学知识,故其余的在业务需要之时,结合案例学习。
4.6 伪随机数生成
numpy.random模块对Python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数。
称之为“伪随机函数”,是因为它们都是通过 算法基于 随机数生成器种子,在确定性的条件下生成的。
可通过NumPy的np.random.seed更改随机数生成种子:
numpy.random的数据生成函数,使用了全局的随机种子。
要避免全局状态,可使用np.random.RandomState创建一个与其它隔离的随机数生成器:
部分numpy.random中的函数:
4.7 示例:随机漫步
随机漫步理论参考:https://blog.csdn.net/Da___Vinci/article/details/82958297
(1)简单的随机漫步:从0开始,步长1和-1等概率出现
关于random.randint函数,参见:https://www.cnblogs.com/ElonJiang/p/11627717.html
基于所得的数据,沿漫步路径做一些统计工作,如求最大值和最小值:
继续求1000个随机漫步值生成的折线图:
Ps:稍复杂的统计任务——计算首次穿越时间,即随机漫步过程中第一次到达某个特定值的时间
假设,统计本次随机漫步需要多久才能距离初始0点至少10步远(任一方向均可)
其中,函数 .argmax(),返回的是该布尔型数组(np.abs(walk)>=10)第一个最大值的索引(True就是最大值)。
(2)一次模拟多个随机漫步
示例,模拟5000个随机漫步过程。
(关于np.random.randint函数,参见:https://www.cnblogs.com/ElonJiang/p/11627717.html)
进行随机漫步过程最大值和最小值的统计:
统计30或-30的最小穿越时间:
1)先用any方法进行检查
2)用该布尔类型数组选出穿越了30(abs绝对值)的随机漫步(行),调用argmax在轴1上获取穿越时间
利用Python进行数据分析 第4章 NumPy基础-数组与向量化计算(3)的更多相关文章
- 利用Python进行数据分析 第4章 IPython的安装与使用简述
本篇开始,结合前面所学的Python基础,开始进行实战学习.学习书目为<利用Python进行数据分析>韦斯-麦金尼 著. 之前跳过本书的前述基础部分(因为跟之前所学的<Python基 ...
- python数据分析---第04章 NumPy基础:数组和矢量计算
NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...
- 利用Python进行数据分析 第7章 数据清洗和准备(2)
7.3 字符串操作 pandas加强了Python的字符串和文本处理功能,使得能够对整组数据应用字符串表达式和正则表达式,且能够处理烦人的缺失数据. 7.3.1 字符串对象方法 对于许多字符串处理和脚 ...
- python数据分析 Numpy基础 数组和矢量计算
NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...
- python numpy基础 数组和矢量计算
在python 中有时候我们用数组操作数据可以极大的提升数据的处理效率, 类似于R的向量化操作,是的数据的操作趋于简单化,在python 中是使用numpy模块可以进行数组和矢量计算. 下面来看下简单 ...
- 利用Python进行数据分析 第6章 数据加载、存储与文件格式(2)
6.2 二进制数据格式 实现数据的高效二进制格式存储最简单的办法之一,是使用Python内置的pickle序列化. pandas对象都有一个用于将数据以pickle格式保存到磁盘上的to_pickle ...
- 利用Python进行数据分析 第7章 数据清洗和准备(1)
学习时间:2019/10/25 周五晚上22点半开始. 学习目标:Page188-Page217,共30页,目标6天学完,每天5页,预期1029学完. 实际反馈:集中学习1.5小时,学习6页:集中学习 ...
- 利用Python进行数据分析 第8章 数据规整:聚合、合并和重塑.md
学习时间:2019/11/03 周日晚上23点半开始,计划1110学完 学习目标:Page218-249,共32页:目标6天学完(按每页20min.每天1小时/每天3页,需10天) 实际反馈:实际XX ...
- 利用Python进行数据分析 第5章 pandas入门(2)
5.2 基本功能 (1)重新索引 - 方法reindex 方法reindex是pandas对象地一个重要方法,其作用是:创建一个新对象,它地数据符合新地索引. 如,对下面的Series数据按新索引进行 ...
随机推荐
- Linux下基于Xampp的TestLink的安装部署
由于项目需要,故需要搭建Testlink,且出于稳定,考虑在linux环境部署,当然windows系统也是可以的. 系统:64位操作系统 linux:centos6.8 testlink:1.9.14 ...
- Spring注解不生效
如果在使用spring中,发现注解不生效,检查下如下配置是否配置. 1:一般情况下@Autowired默认是不生效的,配置之后,才会生效 <context:annotation-config / ...
- Python3 输入和输出(二)
接上一节 1.读写文件的模式图 将字符串写入到文件 foo.txt 中: #!/usr/bin/python3 # 打开一个文件f = open("/tmp/foo.txt", & ...
- java权限管理与用户角色权限设计
java权限管理与用户角色权限设计 实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器 ...
- sklearn中的弹性网函数 ElasticNet
语法: ElasticNet(self, alpha=1.0, l1_ratio=0.5, fit_intercept=True, normalize=False, precompute=False ...
- kvm网卡配置
https://blog.51cto.com/quliren/2046001 https://blog.51cto.com/quliren/2045555 https://blog.csdn.net/ ...
- jquery获取html中当前元素对象,以及父对象,相邻的上一个对象,或下一个对象
jsp代码: <span><input type="hidden" value="1" id="newInfo">& ...
- Discretized Streams: A Fault-Tolerant Model for Scalable Stream Processing
https://www2.eecs.berkeley.edu/Pubs/TechRpts/2012/EECS-2012-259.pdf Discretized Streams: A Fault-Tol ...
- angular 中父子路由
1. 创建组件引入组件 import { NewsaddComponent } from './components/newsadd/newsadd.component'; import { News ...
- [Java复习] 分布式高可用-Hystrix
什么是Hystrix? Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制. Hystrix 的设计原则 对依赖服务调用时出现的调用延迟和调用失败进 ...