Tip:全称Numerical Pythn,是高性能科学计算和数据分析的基础包。本书所有高级工具的构建基础。
NumPy功能
- ndarry,矢量算术运算和复杂广播能力的快速切节省空间的多维数组
- 对数组数据进行快速运算的标准数据函数(无需编写循环)
- 读写磁盘的工具,,操作内存映射文件的工具
- 线性代数、随机数生成以及傅立叶变换
- 集成C、C++、Fortran等语言编写的代码(从生态系统角度,最重要的功能)
对于大部分数据分析应用,作者关注功能:
- 数据整理和清理、子集构造和过滤、转换等快速矢量化数组运算
- 数组算法,如排序、唯一化、集合运算
- 高效描述统计和数据聚合/摘要运算
- 异构数据集的合并/连接运算
- 条件逻辑表述为数组表达式(除去if-else-if循环)
- 数据分组运算
Tip:标准NumPy约定,总是使用
import NumPy as np
,而不是from NumPy import *
.
ndarray: 一种多维数组对象
Tip:NumPy最重要特点是其N维数组对象(即ndarray,该对象是一个快速而灵活的大数据集容器)。
大多数数据分析工作不需要深入理解NumPy,但精通面向数组的编程和思维方式是成为Python科学计算牛人的一大关键步骤。
Focus:本书提到的
数组
、NUmPy数组
、ndarray
都是指ndarray对象
- ndarray是同构数据多维容器,其中所有元素相同的类型。
- 每个数组都有shape和dtype属性
创建ndarray
1 | #!/usr/bin/python |
Focus:如无特别指定,数据类型基本都是float64
ndarray的数据类型
ndarray的astype方法可转换其dtype:
1 | arr = np.array([1,2,3,4,5]) |
数组与标量之间运算
无需循环就可执行批量运算;这就叫做矢量化(vectorization)。不同大小数组之间的运算叫做广播。
1 | arr = np.array([[1.,2.,3.], [4.,5.,6.]]) |
基本索引和切片
与列表最重要区别在于,数组切片是原始数组的视图。说明数据不会被复制,视图伤的任何修改都会直接反映到数组上。若非要复制,就要显式复制:arr[5:8].copy()
1 | arr = np.arange(10) |
切片索引
ndarray切片语法与一维对象相似。多维切片只是一维的基础山进行扩展。
沿着第0轴切片;切片是沿着一个轴向选取元素的。一次传入多个切片:
1 | arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]]) |
上面只能得到相同维数的数组视图。
通过将整数索引和切片混合,可以得到低维度的切片:
1 | print arr2d[1,:2] |
Focus:
:
,冒号表示选取整个轴。
对切片表达式进行赋值,该操作会扩散到整个选区。
1 | arr2d[:2, 1:] = 0 |
布尔型索引
二维数组切片,第一个数字开始在行这个维度上切片,第二个数字在列上切片。
布尔型索引选取数组中多数据,总是创建数的副本,即使是返回一摸一样多数组。
⚠️:Python关键字and和or在布尔型数组中无效。
通过布尔型数组设置值,如下,将data中的所有负值都设为0:
1 | data[data < 0] = 0 |
一维数组设置正行或列的值:
1 | data[name != 'Joe'] = 7 |
花式索引
指利用整数数组进行索引;花式索引跟切片不一样,总是将数据复制到新数组中。
1 | arr = np.empty((8,3)) |
数组转置与轴对换
1 | arrzzdh = np.arange(15).reshape(3,5) |
利用数组进行数据处理
用数组表达式代替循环的做法,称为矢量化。
1 | points = np.arange(-5,5,0.1) # 1000个间隔相等的点 |
将条件逻辑表述为数组运算
如numpy.where函数
是三元表达式x if condition erse y
的矢量化版本。
1 | result = np.where(condition="",x="",y="") |
满足条件则x,否则y
数学和统计方法
1 | arr = np.random.randn(5, 4) |
1 | ## 排序 |
1 | ## 唯一化 |
1 | ## 用于数组的文件输入输出 |
1 | # 存取文本文件 |
最后涉及到了线性代数,随机漫步等数学概念,深切体会到学好数学是任何一门科学想要往高了走的必然阶梯,计算机科学当然也不例外。
今天组内培训,讲了一些代码规范、版本更新和项目管理的知识,无规矩不成方圆,团队大了,尤其需要一套行之有效的规矩来约束每个人的行为,代码能体现一个人的行为方式,是否有代码洁癖。Talk is cheap, show me the code.
希望组内能坚持下去,互相code Review。
- 本文作者: Linking
- 本文链接: https://linking.fun/2017/03/14/《利用Python进行数据分析》读书笔记-4-第四章-Numpy基础:数组和矢量计算/
- 版权声明: 版权所有,转载请注明出处!