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

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

(AI算法系列)

1知识点

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

2具体内容

2.1Python基础

2.1.1列表推导与条件赋值

1.列表推导式

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

2.多层嵌套

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

3.if条件赋值

value = a if xxx else b
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')))
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)
  • 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)
  • 两个列表建立映射:
dict(zip(L1,L2))
  • *、zip 联合解压
zipped = list(zip(L1,L2,L3))
list(zip(*zipped))
#[('a', 'b', 'c'), ('d', 'e', 'f'), ('h', 'i', 'j')]

2.2Numpy基础

2.2.1构造
import numpy as np
np.array([1,2,3])
  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()
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. 更新矩阵
A= np.arange(1,10).reshape(3,3)
B = A*(1/A).sum(1)#按行相加
  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. 改进矩阵计算
    向量差的平方,用平方差公式展开
(((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. 连续整数最大长度
lambda x:np.diff(np.nonzero(np.r_[1,np.diff(x)!=1,1])).max()

3待补充

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

4Q&A

5code

6参考

  • http://joyfulpandas.datawhale.club/Content/ch1.html#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值