• 数分-工具-Pandas1-预备知识


    数分-工具-Pandas1-预备知识

    (AI算法系列)

    1知识点

    • Python基础
      • 列表推导与条件赋值
      • 匿名函数与map
      • zip与enumerate
    • Numpy基础
      • 构造
      • 变形与合并
      • 切片、索引
      • 常用函数
      • 广播机制
      • 向量与矩阵计算
    • 练习

    2具体内容

    2.1Python基础

    2.1.1列表推导与条件赋值

    1.列表推导式

    xxx for i in yyy 
    #xxx为映射函数,其输入为后面 i 指代的内容
    #yyy表示迭代的对象
    
    • 1
    • 2
    • 3

    2.多层嵌套

    xxx for m in yyy for n in zzz
    #第一个for为外层循环
    
    • 1
    • 2

    3.if条件赋值

    value = a if xxx else b
    
    • 1
    2.1.2匿名函数与map
    my_func = lambda x:2*x
    multi_para_func = lambda a,b :a+b
    
    [(lambda x:2*x)(i) for i in range(5)]
    #等价于
    list(map(lambda x:2*x, range(5)))
    
    list(map(lambda x, y: str(x)+'_'+y, range(5), list('abcde')))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    2.1.3zip与enumerate
    • zip函数能够把多个可迭代对象打包成一个元组构成的可迭代对象,它返回了一个 zip 对象,通过 tuple, list 可以得到相应的打包结果
    L1, L2, L3 = list('abc'), list('def'), list('hij')
    
    for i, j, k in zip(L1, L2, L3):
        print(i, j, k)
    
    • 1
    • 2
    • 3
    • 4
    • enumerate 是一种特殊的打包,它可以在迭代时绑定迭代元素的遍历序号
    L = list('abcd')
    for idx,val in enumerate(L):
    	print(idx, val)
    #等价于:
    for idx,val in zip(range(len(L)),L):
    	print(idx, val)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 两个列表建立映射:
    dict(zip(L1,L2))
    
    • 1
    • *、zip 联合解压
    zipped = list(zip(L1,L2,L3))
    list(zip(*zipped))
    #[('a', 'b', 'c'), ('d', 'e', 'f'), ('h', 'i', 'j')]
    
    • 1
    • 2
    • 3

    2.2Numpy基础

    2.2.1构造
    import numpy as np
    np.array([1,2,3])
    
    • 1
    • 2
    1. 等差序列:np.linspace, np.arange
    2. 全0阵np.zeros,单位矩阵np.eyes,矩阵填充np.full
    3. 随机矩阵np.random.【rand0-1均匀分布的随机数组, randn标准正态的随机数组, randint随机整数组, choice随机列表抽样】
      • 均匀分布 (b - a) * np.random.rand(3) + a
      • 0-1标准正太分布 np.random.randn(2, 2)
      • 一元正太分布mu + np.random.randn(3) * sigma
      • 随机整数最小最大及维度 np.random.randint(low, high, size)
      • choice默认均匀采样,抽取又放回抽样 np.random.choice(my_list, 2, replace=False, p=[0.1, 0.7, 0.1 ,0.1])
      • 当返回的元素个数与原列表相同时,等价于使用 permutation 函数,即打散原列表 np.random.permutation(my_list)
      • 随机种子,固定随机数的输出结果
     np.random.seed(0)
      np.random.rand()
    
    • 1
    • 2
    2.2.2变形与合并
    1. 转置T
    2. 合并r_(上下),c_(左右)
    3. 维度变换:reshape能够帮助用户把原数组按新的维度重新排列,C逐行填充,F逐列填充
      • 被调用数组的大小是确定的,reshape 允许有一个维度存在空缺,此时只需填充-1
      • a.reshape(-1)将 n*1 大小的数组转为 1 维数组
    2.2.3切片、索引
    • slice 类型的 start🔚step 切片,还可以直接传入列表指定某个维度的索引
    • 利用 np.ix_(行) 在对应的维度上使用布尔索引,但此时不能使用 slice 切片
    • 数组1维,直接布尔索引,不用np.ix_
    2.2.4常用函数
    1. where 条件函数
    2. nonzero, argmax, argmin 返回索引
    3. any 序列至少 存在一个 True 或非零元素时返回 True ,否则返回 False
    4. all 序列元素 全为 True 或非零元素时返回 True ,否则返回 False
    5. cumprod, cumsum 分别表示累乘和累加函数,返回同长度的数组
    6. diff 表示和前一个元素做差,由于第一个元素为缺失值,因此在默认参数情况下,返回长度是原数组减 1
    7. 统计函数: max, min, mean, median, std, var, sum, quantile ,其中分位数计算是全局方法,因此不能通过 array.quantile 的方法调用(np.quantile(target, 0.5))
      • 对于含有缺失值的数组,对应的 nan* 函数
    8. cov协方差,corrcoef相关系数
    9. 注意:axis=0 时结果为列的统计指标,当 axis=1 时结果为行的统计指标
    2.2.5广播机制
    1. 标量和数组:标量会自动把大小扩充为数组大小,之后进行逐元素操作
    2. 二维数组之间:当两个数组维度完全一致时,使用对应元素的操作,否则会报错,除非其中的某个数组的维度是 m×1 或者1 × n ,那么会扩充其具有 1 的维度为另一个数组对应维度的大小
    3. 一维数组与二维数组:当一维数组 A k A_k Ak 与二维数组 B m , n B_{m,n} Bm,n 操作时,等价于把一维数组视作 A 1 , k A_{1,k} A1,k的二维数组,使用的广播法则与上条中一致,当 k! = n 且 k,n 都不是 1 时报错
    2.2.6向量与矩阵计算
    1. 内积dot
    2. 向量范数和矩阵范数:np.linalg.norm
      在这里插入图片描述
    3. 矩阵乘法:@

    2.3练习

    1. 列表推导式
    res = [[sum([M1[i][k] * M2[k][j] for k in range(M1.shape[1])]) for j in range(M2.shape[1])] for i in range(M1.shape[0])]
    np.abs((M1@M2 - res) < 1e-15).all()
    
    • 1
    • 2
    1. 更新矩阵
    A= np.arange(1,10).reshape(3,3)
    B = A*(1/A).sum(1)#按行相加
    
    • 1
    • 2
    1. 卡方统计量
    A = np.random.randint(10, 20, (8, 5))
    A.sum()#全部元素和,一个值
    B = A.sum(0)* A.sum(1).reshape(-1,1)/ A.sum()#reshape为一列
    C = ((A - B) ** 2/B).sum()
    
    • 1
    • 2
    • 3
    • 4
    1. 改进矩阵计算
      向量差的平方,用平方差公式展开
    (((B ** 2).sum(1).reshape(-1,1) + (U ** 2).sum(0) - 2*B@U)*Z).sum()
    # B是 m × p,按行加出p列 ,U是 p × n,按列加出p行,再运算
    
    • 1
    • 2
    1. 连续整数最大长度
    lambda x:np.diff(np.nonzero(np.r_[1,np.diff(x)!=1,1])).max()
    
    • 1

    3待补充

    • Numpy矩阵运算
    • Numpy常用函数,需要再熟练

    4Q&A

    5code

    6参考

    • http://joyfulpandas.datawhale.club/Content/ch1.html#
  • 相关阅读:
    2022年下半年系统架构师考试题
    SQL union all的使用
    算力和LAXCUS分布式操作系统
    JAVASE---认识异常
    Linux .sh文件
    2022年 hust OJ 最新搭建方式
    Ansys Zemax / Ansys Speos | 如何使用Ansys光学解决方案设计和分析 HUD系统
    Java核心编程(17)
    每日三题 6.30(2)
    RESTful风格学习笔记【包含示例】
  • 原文地址:https://blog.csdn.net/u012835414/article/details/126350468