二、NumPy入门
来源:《Python数据科学手册》
url:https://github.com/jakevdp/PythonDataScienceHandbook
描述:笔记
目录
1、理解python中的数据类型
1.1 Python整形不仅仅是一个整形
1.2 Python列表不仅仅是一个列表
1.3 Python中固定类型数组
1.4 从Python列表创建数组
1.5 从头创建数组
1.6 Numpy标准数据类型
2、Numpy数组基础
2.1 Numpy数组的属性
2.2 数组索引:获取单个元素
2.3 数组切片:获取子数组
2.4 数组的变形
2.5 数组拼接和分裂
3、Numpy数组的计算:通用函数
3.1 缓慢的循环
3.2 通用函数介绍
3.3 探索Numpy的通用函数
3.4 高级的通用函数特性
3.5 通用函数:更多的信息
4、聚合:最小值、最大值和其他值
4.1 数组值求和
4.2 最大值和最小值和多维度聚合
5、数组的计算:广播
5.1 广播的介绍
5.2 广播的规则
5.3 广播的实际应用
6、比较、掩码和布尔逻辑
6.1 示例:统计下雨天数
6.2 和通用函数类似的比较操作
6.3 操作布尔数组
6.4 将布尔数组作为掩码
7、花哨的索引
7.1 探索花哨的缩影
7.2 组合索引
7.3 示例:选择随机点
7.4 用花哨的索引修改值
7.5 示例:数据区域划分
8、数组的排序
8.1 Numpy中的快速排序:np.sort和np.argsort
8.2 部分排序:分隔
8.3 示例:k个最近邻
9、机构化数据:Numpy的结构化数组
9.1 生成结构化数组
9.2 更高级的复合类型
9.3 记录数组:结构化数组的扭转
9.4 关于pandas
1、理解python中的数据类型
在c语言中,每个变量的数据类型被明确地声明
在python中,类型是动态推断的,这意味着可以将任何类型的数据指定给任何变量。
1.1 Python整形不仅仅是一个整形
c语言整型本质上是对应某个内存位置的标签,里面存储的字节会编码成整型。
python的整型其实是一个指针,指向包含这个python对象所有信息的某个内存位置,其中包括可以转换成整型的字节。
1.2 Python列表不仅仅是一个列表
在实现层面上,数组基本上包含一个指向连续数据块的指针。
python列表包含一个指向指针块的指针,这其中的每一个指针对应一个完整的python对象,这意味着python列表是动态类型的。
numpy式数组是固定类型的。
1.3 Python中固定类型数组
内置的数组(array)模块可以用于创建统一类型的密集数组。
python的数组对象提供了数组型数据的有效存储,而numpy为该数据加上了高效的操作。
1.4 从Python列表创建数组
1.5 从头创建数组
1.6 Numpy标准数据类型
数据类型 | 描述 |
bool_ | 布尔值(真、True或假、False),用一个字节存储 |
int_ | 默认整型(类似于c语言中的long,通常情况下是int64或int32) |
intc | 同c语言的int相同(通常是int32或int64) |
intp | 用作索引的整型(和c语言的ssize_t相同,通常情况下是int32或int64) |
int8 | 字节(byte,范围从-128到127) |
int16 | 整型(范围从-32768到32767) |
int32 | 整型(范围从-2^32到2^32-1) |
int64 | 整型(范围...) |
unit8 | 无符号整型(范围从0到255) |
unit16 | 无符号整型(范围从0到65535) |
unit32 | 无符号整型(范围从0到429497295) |
unit64 | 无符号整型 |
float_ | float64的简化形式 |
float16 | 半精度浮点型:符号比特位,5比特位指数,10比特位尾数 |
float32 | 单精度浮点型 |
float64 | 双精度浮点型 |
complex_ | complex128的简化形式 |
complex64 | 复数,由两个32位浮点数表示 |
complex128 | 复数,由两个64位浮点数表示 |
2、Numpy数组基础
2.1 Numpy数组的属性
确定数组的大小、形状、存储大小、数据类型
2.2 数组索引:获取单个元素
2.3 数组切片:获取子数组
2.4 数组的变形
2.5 数组拼接和分裂
3、Numpy数组的计算:通用函数
3.1 缓慢的循环
3.2 通用函数介绍
numpy为很多类型的操作提供了非常方便的、静态类型的、可编译程序的接口,也被称作向量操作。
numpy中的向量操作是通过通用函数实现的。
通用函数的主要目的是对numpy数组中的值执行更快的重复操作。
3.3 探索Numpy的通用函数
通用函数有两种存在形式:一元通用函数(unary ufunc)对单个输入操作,二元通用函数(binary ufunc)对两个输入操作。
运算符 | 对应的通用函数 | 描述 |
+ | np.add | 加分运算 |
- | np.subtract | 减法运算 |
- | np.negative | 负数运算 |
* | np.multiply | 乘法运算 |
/ | np.divide | 除法运算 |
// | np.floor_divide | 求整运算 |
** | np.power | 指数运算 |
% | np.mod | 模/余数 |
np.abs | np.absolute | 绝对值函数 |
numpy和scipy.special中提供了大量的通用函数 |
3.4 高级的通用函数特性
4、聚合:最小值、最大值和其他值
4.1 数组值求和
np.sum()
4.2 最大值和最小值和多维度聚合
函数名称 | NaN安全版本 | 描述 |
np.sum | np.nansum | 计算元素的和 |
np.prod | np.nanprod | 计算元素的积 |
np.mean | np.nanmean | 计算元素的平均值 |
np.std | np.nanstd | 计算元素的标准差 |
np.var | np.nanvar | 计算元素的方差 |
np.min | np.nanmin | 找出最小值 |
np.max | np.nanmax | 找出最大值 |
np.argmin | np.nanargmin | 找出最小值的索引 |
np.argmax | np.nanargmax | 找出最大值的索引 |
np.median | np.nanmedian | 计算元素的中位数 |
np.percentile | np.nanpercentile | 计算基于元素排序的统计值 |
np.any | N/A | 验证任何一个元素是否为真 |
np.all | N/A | 验证所有元素是否为真 |
5、数组的计算:广播
广播可以简单理解为用于不同大小数组的二进制通用函数(加、减、乘等)的一组规则。
5.1 广播的介绍
5.2 广播的规则
numpy的广播遵循一组严格的规则来决定两个数组间的操作
5.3 广播的实际应用
6、比较、掩码和布尔逻辑
6.1 和通用函数类似的比较操作
运算符 | 对应的通用函数 |
== | np.equal |
!= | np.not_equal |
< | np.less |
<= | np.less_equal |
> | np.greater |
>= | np.greater_equal |
6.2 操作布尔数组
6.3 将布尔数组作为掩码
7、花哨的索引
7.1 探索花哨的索引
7.2 组合索引
7.3 用花哨的索引修改值
8、数组的排序
8.1 Numpy中的快速排序:np.sort和np.argsort
通过这样变换的行或列,任何行或列的值之间的关系都将丢失。
8.2 部分排序:分隔
8.3 示例:k个最近邻
9、机构化数据:Numpy的结构化数组
9.1 生成结构化数组
9.2 更高级的复合类型
9.3 记录数组:结构化数组的扭转
9.4 关于pandas
10、数组转置和换轴
11、将条件逻辑作为数组操作
12、唯一值与其他结合逻辑
unique(x) | 计算x中的唯一值,并排序 |
intersect1d(x,y) | 计算x和y的交集,并排序 |
union(x,y) | 计算x和y的并集,并排序 |
in1d(x,y) | 计算x中的元素是否包含在y中,返回一个布尔值数组 |
setdiff1d(x,y) | 差集,在x中但不在y中的x的元素 |
setxor1d(x,y) | 异或集,在x或y中,但不属于x,y交集的元素 |
13、线性代数
函数 | 描述 |
diag | 将一个方阵的对角(或非对角)元素作为一维数组返回,或者将一维数组转换成一个方阵,并且在非对角线上有零点 |
dot | 矩阵点乘 |
trace | 计算对角元素和 |
det | 计算矩阵的行列式 |
eig | 计算方阵的特征值和特征向量 |
inv | 计算方阵的逆矩阵 |
pinv | 计算矩阵的Moore-Penrose伪逆 |
qr | 计算QR分解 |
svd | 计算奇异值分解(SVD) |
solve | 求解x的线性系统Ax=b,其中A是方阵 |
lstsq | 计算Ax=b的最小二乘解 |
14、伪随机数生成
函数 | 描述 |
seed | 向随机数生成器传递随机状态种子 |
permutation | 返回一个序列的随机排列,或者返回一个乱序的整数范围序列 |
shuffle | 随机排列一个序列 |
rand | 从均匀分布中抽取样本 |
randint | 根据给定的由低到高的范围抽取随机整数 |
randn | 从均值0方差1的正态分布中抽取样本(MATLIB型接口) |
binomial | 从二项分布中抽取样本 |
normal | 从正态(高斯)分布中抽取样本 |
beta | 从beta分布中抽取样本 |
chisquare | 从卡方分布中抽取样本 |