NumPy入门(一)

发布于:2024-04-10 ⋅ 阅读:(137) ⋅ 点赞:(0)

NumPy入门(一)

工具: jupyter notebook

jupyter notebook 功能 :

  1. 数据处理 (python 处理数据功能) coding
  2. 文字型的描述 富文本 word
  3. 可视化支持

官网: https://jupyter.org/

启动命令 jupyter notebook

1.1 numpy简介

Python的拓展库, 提供数据对象 ndarray, 运算速度上快于python中的list

1.2 ndarray 属性

  • ndim: 维度
  • shape: 形状
  • size: 总长度
  • dtype: 元素类型

1.3 创建 ndarray

  1. 创建一个一维数组(其中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 的常规函数创建数组

  1. np.ones(shape, dtype=None, order=‘C’), 生成元素都为1

shape: 形状,使用元组表示
在这里插入图片描述

  1. np.zeros(shape=(3,1),dtype=np.uint8), 生成元素都为0的数组, 形状为3行1列
    在这里插入图片描述
  2. np.full(shape=(3,3), fill_value=6) , 生成元素都为一个值,6填满的数组
  3. np.eye(N=3,M=2,k=1)

    N:int型,表示的是输出的行数
    M:int型,可选项,输出的列数,如果没有就默认为N
    k:int型,可选项,对角线的下标,默认为0表示的是主对角线,负数表示的是低对角,正数表示的是高对角。
    在这里插入图片描述

  4. np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 生成等间距的数组

start, stop 开始结束, num: 生成个数, endpoint 是否包含终点, restep 是否返回步长在这里插入图片描述

  1. np.arange([start, ]stop, [step, ]dtype=None) start, stop 开始结束, step 设置步长, 默认为1

在这里插入图片描述

  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,则返回一个标量整数。如果指定形状,将生成一个具有该形状的多维数组,其中每个元素都是指定范围内的随机整数。
在这里插入图片描述

  1. 正态分布函数
  • np.random.randn(d0, d1, …, dn) 标准正态分布
  • np.random.normal() 普通正态分布

正态分布: 正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形。

  1. np.random.random(size=None) 生成0到1的随机数,左闭右开

  2. np.random.permutation(10) 生成随机索引

  3. 随机种子, 添加种子: np.random.seed(1)
    在这里插入图片描述

1.4 ndarray 读写操作

1.4.1 索引访问

在这里插入图片描述
ndarray 的高维数组访问,使用 [dim1_index, dim2_index…]
在这里插入图片描述

1.4.2 列表访问

  1. 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

网站公告

今日签到

点亮在社区的每一天
去签到