NumPy入门(一)
工具: jupyter notebook
jupyter notebook 功能 :
- 数据处理 (python 处理数据功能) coding
- 文字型的描述 富文本 word
- 可视化支持
官网: https://jupyter.org/
启动命令 jupyter notebook
1.1 numpy简介
Python的拓展库, 提供数据对象 ndarray, 运算速度上快于python中的list
1.2 ndarray 属性
- ndim: 维度
- shape: 形状
- size: 总长度
- dtype: 元素类型
1.3 创建 ndarray
- 创建一个一维数组(其中display可以进行输出)
2 .属性arrtwo = np.array([[1,2,3],[4,5,6]]) # display输出效果 display(arrtwo) ''' array([[1, 2, 3],[4, 5, 6]]) ''' # print 输出效果 ''' [[1 2 3] [4 5 6]] ''' ######### 属性操作 ########## # 获取数组维度 arrtwo.ndim # 2 二维# 获取数组形状 arrtwo.shape # (2, 3) 2行3列# size:总长度 arrtwo.size # 6# dtype:元素类型 arrtwo.dtype # dtype:元素类型
1.3.1 强制类型统一
numpy设计初衷是用于运算的,所以对数据类型进行统一优化
注意:
- numpy默认ndarray的所有元素的类型是相同的
- 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int
如:
1.3.2 numpy 数据类型
名称 | 描述 |
---|---|
bool_ | 布尔型数据类型(True 或者 False) |
int_ | 默认的整数类型(类似于 C 语言中的 long,int32 或 int64) |
intc | 与 C 的 int 类型一样,一般是 int32 或 int 64 |
intp | 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64) |
int8 | 字节(-128 to 127) |
int16 | 整数(-32768 to 32767) |
int32 | 整数(-2147483648 to 2147483647) |
int64 | 整数(-9223372036854775808 to 9223372036854775807) |
uint8 | 无符号整数(0 to 255) |
uint16 | 无符号整数(0 to 65535) |
uint32 | 无符号整数(0 to 4294967295) |
uint64 | 无符号整数(0 to 18446744073709551615) |
float_ | float64 类型的简写 |
float16 | 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位 |
float32 | 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位 |
float64 | 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位 |
complex_ | complex128 类型的简写,即 128 位复数 |
complex64 | 复数,表示双 32 位浮点数(实数部分和虚数部分) |
complex128 | 复数,表示双 64 位浮点数(实数部分和虚数部分) |
1.3.3 使用 numpy 的常规函数创建数组
- np.ones(shape, dtype=None, order=‘C’), 生成元素都为1
shape: 形状,使用元组表示
- np.zeros(shape=(3,1),dtype=np.uint8), 生成元素都为0的数组, 形状为3行1列
- np.full(shape=(3,3), fill_value=6) , 生成元素都为一个值,6填满的数组
- np.eye(N=3,M=2,k=1)
N:int型,表示的是输出的行数
M:int型,可选项,输出的列数,如果没有就默认为N
k:int型,可选项,对角线的下标,默认为0表示的是主对角线,负数表示的是低对角,正数表示的是高对角。
- np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 生成等间距的数组
start, stop 开始结束, num: 生成个数, endpoint 是否包含终点, restep 是否返回步长
- np.arange([start, ]stop, [step, ]dtype=None) start, stop 开始结束, step 设置步长, 默认为1
- np.random.randint(low, high=None, size=None, dtype=‘l’) 生成随机整数的一个函数
low (int): 随机整数的下限(包含此值)。
high (int, 默认为 None): 随机整数的上限(不包含此值)。如果未指定,则默认为 low + 1,即生成 [low, low+1) 的区间内的整数。
size (int 或 tuple of ints, 默认为 None): 生成随机整数数组的形状。如果为 None,则返回一个标量整数。如果指定形状,将生成一个具有该形状的多维数组,其中每个元素都是指定范围内的随机整数。
- 正态分布函数
- np.random.randn(d0, d1, …, dn) 标准正态分布
- np.random.normal() 普通正态分布
正态分布: 正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形。
-
np.random.random(size=None) 生成0到1的随机数,左闭右开
-
np.random.permutation(10) 生成随机索引
-
随机种子, 添加种子: np.random.seed(1)
1.4 ndarray 读写操作
1.4.1 索引访问
ndarray 的高维数组访问,使用 [dim1_index, dim2_index…]
1.4.2 列表访问
- 1维数组中使用
生成一个数组的随机排列
ndarray 也可以同时作为 ndarray对象的索引列表
arr = np.random.randint(1,100, size=10)
display(arr)
# array([95, 24, 64, 26, 64, 21, 92, 62, 56, 70])# 对原数组进行随机排序
arr[indexs] # 随机排列作为索引不会对原数组元素影响, 仅仅对原数据元素位置影响
# array([70, 64, 95, 26, 64, 92, 24, 56, 21, 62])
2. 高维数组中使
1.4.3 切片访问
注意:
adarray 的访问形式:
adarray[dim1_index, dim2_index, … dimn_index]
dim_index支持的形式 :
int [int] 切片 bool列表
其中只返回 True 的值
1.5 ndarray的级联和切分
1.5.1 级联
级联的注意事项:
- 级联的参数是列表:一定要加中括号或小括号
- 维度必须相同
- 形状相符
- 级联的方向默认是shape这个tuple的第一个值所代表的维度方向
- 可通过axis参数改变级联的方向
- numpy.concatenate是NumPy库中用于连接(拼接)多个数组的函数。它允许您将同一维数的多个数组沿着指定的轴(axis)合并为一个新的单一数组
- np.hstack与np.vstack 函数简化以上concatenate 操作
- vstack 竖着连
- hstack 横着连
1.5.2 切分
与级联类似,三个函数完成切分工作:
- np.split
- np.vsplit
- np.hsplit
- indices_or_sections int 会按照指定的轴向,讲数组切分成N等分, 要求切分的方向上的长度能被N整除
a1, a2 = np.split(arr, indices_or_sections=2, axis=0)display(a1, a2)1
输出效果:
- indices_or_sections [m,n] 表达的是 按照0:m, m:n, n:的切片逻辑对数组进行拆分 【左闭右开区间】
np.split(arr, indices_or_sections=[2,3], axis=1)
- 简化上面函数操作,出现了 vsplit 纵向切,hsplit 横向切
h horizontal 横向
v vertical 纵向
1.6 ndarray 运算
1.6.1 基本运算原则
- 两个矩阵运算,就是对应位置的数据的运算, + - * / 等
1.6.2 广播 Broadcast
ndarray广播机制的两条规则
如果
- 两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符
- 或其中的一方的长度为1
则认为它们是广播兼容的。 广播会在缺失和(或)长度为1的维度上进行。
1.7 ndarray的聚合操作
1.7.1 求和 sum
- sum() 求整个数组和
- sum(axis=0) 求每一行的和
- sum(axis=1) 求每一列的和
ndarray 中的空值表示:np.nan, nan为float
- np.sum 和 np.nansum 的区别
1.7.1 any() 和 all()
- any 一个数组中,如果至少存在一个True, any函数就返回True
- all 一个数组中,如果全都是True, all函数就返回True
1.7.4 常见聚合函数
函数名 | 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.median | np.nanmedian | 计算元素中位数 |
np.percentile | np.nanpercentile | Compute rank-based statistics of elements:计算元素的基于秩的统计信息 |
np.any | - | Evaluate whether any elements are true |
np.all | - | Evaluate whether all elements are true |