统计量 - 熵

Entropy

  • (信息)熵:在概率分布上对复杂程度/多样性/不确定性/混乱程度的度量
  • $p_d$:随机变量各取值对应概率
  • 事件 $i$ 发生概率 $p_d=0$:约定 $p_d log(p_d)$ 为 0
  • 其中 $log$ 以 2 为底,单位为 bit,以 $e$ 为底,单位为 nat
  • 信息论中,熵越高能传输越多信息

    • 可携带的信息量 = 单位消息熵 * 消息长度
    • 熵衡量系统复杂程度,提高系统确定性即削弱系统多样性,降低熵
  • 概率分布包含的信息即其复杂程度(可能取值数量)

    • 考虑按照 $(p_1,\cdots,p_D)$ 分布、长度为 $N$ 的随机变量序列,其可能排列数为 $\frac {N!} {\prod_d^D (p_d N)!}$
    • 则根据 Stirling 公式有

    • 则长度为 $N$ 的随机变量串的多样性、信息量为 $H * N$,其中 $H=\sum_d^D p_d log p_d$ 概率分布的信息熵

  • 某个事件包含的信息可以用编码长度理解

    • 对概率 $p$ 事件,编码 $1/p$ 个需编码(2进制编码)长度 $log_2 \frac 1 p$
    • 则概率 $p$ 事件包含信息量可以定义为 $log \frac 1 p$,即事件包含的信息量可用表示事件需要编码的长度表示 (底数则取决于编码元,只影响系数)
    • 则整个随机变量的信息为各事件信息量加权和
  • 熵可以视为变量取值概率的加权和

    • 只依赖随机变量 $X$ 的分布,与其取值无关,可将其记为 $H(P)$
    • 由定义 $0 \leq H(P) \leq log_2 k$
      • $H(p) = 0$:$\exists j, p_j=1$,随机变量只能取一个值,无不确定性
      • $H(p) = log k$:$\forall j, p_j=1/k$,随机变量在任意取值概率相等,不确定性最大

熵的性质

  • 对称性:事件取值不影响熵

  • 极值性

    • 所有符号有同等机会出现的情况下,熵达到极大(琴生不等式)

    • 仅有一个符号确定出现的情况下,熵达到极小 0

  • Continuity连续性:度量连续,概率微小变化只能引起熵微小变化

  • Normalization规范化:$H_2(\frac 1 2, \frac 1 2) = 1$

  • Grouping组合法则/可加和性:熵与过程如何划分无关 (此即要求熵形式为对数)

    • 若子系统间相互作用已知,则可以通过子系统熵值计算系统整体熵

      • $X_1,\cdots,X_K$:$K$ 个子系统,可以理解为将随机变量 $X$ 划分为 $K$ 种情况
      • $H(X_1,\cdots,X_K)$:子系统相互作用熵
      • 子系统相互作用熵可以认为是,通过已知信息消除的多样性(即信息增益)
      • 子系统熵之和则是利用已知信息消除多样性之后,系统剩余混乱程度
    • 一般的,两个事件 $X,Y$ 熵满足以下计算关系

    • 特别的,若事件 $X, Y$ 相互独立

  • 满足以上特性的熵定义必然为如下形式
$$
-K \sum P(x)log(P(x))
$$
  • 在热力学、信息论等领域,熵有多种不同定义,满足熵性质的测度泛函,只能具有(Shannon 熵和 Hartley 熵)或(von Neumann 熵和 Shannon 熵)线性组合的函数形式,若不要求满足组合法则,还有 Tsallis 熵等

Conditinal Entropy

条件熵:随机变量 $X$ 给定条件下,随机变量 $Y$ 的条件概率分布的熵对 $X$ 的数学期望

  • $P(X=xi, Y=y_j)=p{i,j}$:随机变量 $(X,Y)$ 联合概率分布
  • $p_i=P(X=x_i)$
  • $H(Y|X=x_i)$:后验熵
  • 特别的,考虑数据集 $D$ 被分为 $D_1,\cdots,D_m$,条件经验熵可计算如下

  • postorior entropy:后验熵,随机变量 $X$ 给定条件下,随机变量 $Y$ 的条件概率分布的熵
  • empirical conditional entropy:经验条件熵,概率由数据估计

Infomation Gain/Mutual Infomation

互信息/信息增益:(经验)熵与(经验)条件熵之差

  • 与数据集具体分布有关、与具体取值无关

    • 绝对大小同易受熵影响,(经验)熵较大时,互信息也相对较大
    • 由于误差存在,分类取值数目较多者信息增益较大
  • 可衡量变量 $X$ 对 $Y$ 预测能力、减少不确定性的能力

    • 信息增益越大,变量之间相关性越强,自变量预测因变量能力越强
    • 只能考察特征对整个系统的贡献,无法具体到特征某个取值
    • 只适合作全局特征选择,即所有类使用相同的特征集合

Infomation Gain Ratio

信息增益比:信息增益对原始信息熵的比值

  • 考虑熵大小,减弱熵绝对大小的影响

Cross Entropy

  • 信息论:基于相同事件测度的两个概率分布 $P, Q$,基于非自然(相较于真实分布 $P$)概率分布 $Q$ 进行编码,在事件集合中唯一标识事件所需 bit
  • 概率论:概率分布 $P, Q$ 之间差异
  • $P(x), Q(x)$:概率分布(密度)函数
  • $r(x)$:测度,通常是 $Borel \sigma$ 代数上的勒贝格测度
  • $D_{KL}(P||Q)$:$P$ 到 $Q$ 的 KL 散度($P$ 相对于 $Q$ 的相对熵)
  • 信息论中,交叉熵可以看作是信息片段在错误分布 $Q$ 分布下的期望编码长度
    • 信息实际分布实际为 $P$,所以期望基于 $P$
  • 交叉熵是常用的损失函数:效果等价于 KL 散度,但计算方便
  • sigmoid 激活函数时:相较于二次损失,收敛速度更快

Entropy 衍生指标

Kullback-Leibler Divergence

KL 散度/相对熵:衡量概率分布 $P, Q$ 之间差异的量化指标

  • KL 散度含义

    • 原始分布 $P$、近似分布 $Q$ 之间对数差值期望
    • 若使用观察分布 $Q$ 描述真实分布 $P$,还需的额外信息量
  • KL 散度不对称,分布 $P$ 度量 $Q$、$Q$ 度量 $P$ 损失信息不同

    • 从计算公式也可以看出
    • KL散度不能作为不同分布之间距离的度量

Population Stability Index

PSI:衡量分布 $P, Q$ 之间的差异程度

  • KL 散度的对称操作
    • 更全面的描述两个分布的差异

Gini 指数

基尼指数:可视为信息熵的近似替代

  • $p$:概率分布
  • 异质性最小:Gini 系数为 0
  • 异质性最大:Gini 系数为 $1 - \frac 1 k$
  • Gini 指数度量分布的不纯度
    • 包含类别越多,Gini 指数越大
    • 分布越均匀,Gini 指数越大
  • 熵较 Gini 指数对不纯度判罚更重

gini_entropy_error_rate_in_binary_classification

  • 经济学领域的 Gini 系数更类似 AUC

Entropy 关系

  • Gini 指数可以视为是熵在 1 附近的一阶泰勒展开近似

条件 Gini 指数

  • 性质类似信息增益

统计量 - 相关

Pearson 积矩相关系数

  • $cov(X, Y)$:变量 $X, Y$ 协方差
  • $\sigma_X, \sigma_Y$:变量 $X, Y$ 方差
  • Pearson 积矩相关系数取值范围为 $[-1, 1]$
    • $1, -1$ 分别表示变量成正线性、负线性函数关系

显著性检验

Fisher 变换

  • $z$:Pearson 积矩相关系数的 Fisher 变换
  • $r$:样本的 Pearson 积矩相关系数值
  • 当 $(X, Y)$ 为二元正态分布时,$z$ 近似正态分布
    • 均值:$\frac 1 2 ln(\frac {1+\rho} {1-\rho})$
    • 标准差:$\frac 1 {\sqrt {N - 3}}$

基于数学的近似方法

  • 当 $(X, Y)$ 为二元正态分布且不相关时,$t$ 服从自由度为 $n-2$的 t-分布

Spearman 秩相关系数

  • $Rank(X), Rank(Y)$:变量 $X, Y$ 的秩(应同序)(相同值秩取均值)
  • $d_i$:变量对 $X, Y$ 中,二者秩差值
  • Spearman 秩相关系数被定义为变量秩的 Pearson 相关系数
  • Spearman 秩相关系数也可以使用 Fisher 变换检验显著性

Kendell 秩相关系数

  • $N_0 = \frac {N(N-1)} 2$:变量对数量
  • $N_c, N_d$:变量对 $X, Y$ 中有序对数量、无序对数量
  • $N_X, N_Y$:变量对 $X, Y$ 中 $X$ 取值、$Y$ 取值相同对数量
  • $M$:变量 $X, Y$ 中较小取值数量者取值数量
  • Kendell 秩相关系数取值范围同样为 $[-1, 1]$

    • -1 仅在变量 $X, Y$ 取值完全反向取到
  • $\tau_a$ 是 $\tau_b$ 在变量不存在取值相同时的特例

  • $\tau_c$ 适合“层级”数据,即两个变量取值类似划分、内部细分

    ||A|B|C| |——-|——-|——-|——-| |I-1|30|0|0| |I-2|30|0|0| |II-1|0|30|0| |II-1|0|30|0| |III-2|0|0|30| |III-2|0|0|30|

    • 对以上数据,$\tau_b$ 取值在 0.9 附近,而 $\tau_c$ 取 1
  • 有序对:对 $(X_i, Y_i), (X_j, Y_j)$,满足 $X_i < X_j, Y_i < Y_j$ 或 $X_i > X_j,Y_i > Y_j$ 则为有序对
  • 无序对:对$(X_i, Y_i), (X_j, Y_j)$,满足 $X_i < X_j, Y_i > Y_j$ 或 $X_i > X_j, Y_i < Y_j$ 则为无序对

卡方统计量

卡方统计量:通过观察实际与理论值的偏差确定理论正确与否

  • $A$:自变量、因变量组合对应频数观察值
  • $E$:自变量、因变量组合对应频数期望值
  • 将模型预测结果视为实际分布、先验分布(均匀分布)视为理论分布

  • 卡方检验:检验定性变量之间相关性,假设两个变量确实独立,观察实际值、理论值偏差程度判断变量之间相关性

    • 若偏差足够小,认为误差是自然的样本误差,两者确实独立
    • 若偏差大到一定程度,误差不可能由偶然、测量精度导致, 认为两者相关
  • 若模型预测结果同先验分布差别很大,说明模型有效,且卡方统计量值越大表示预测把握越大

特点

  • 由于随机误差存在,卡方统计量容易
    • 夸大频数较小的特征影响
    • 相应的,取值数较少(各取值频数相对而言可能较大)特征影响容易被低估

分布证明

  • 考虑随机变量 $X=(x_1,\cdots,x_D)$ 服从 Multinomial 分布,分布参数为 $n, p=(p_1,\cdots,p_D)$

  • 考虑服从理论分布的随机变量 $X$ 协方差矩阵

  • 则由中心极限定理有,如下依分布收敛的结论

  • 考虑服从理论分布的随机变量 $X$ 的 $\chi^2$ 参数

  • 并由连续映射定理可以得到 $D\frac {x-np} {\sqrt n}$ 分布,且其协方差矩阵 $\Sigma_0$ 满足

  • 由以上,$\Sigma_0$ 仅有特征值 0,1

    • 特征值 0 对应特征向量有且仅有 $\sqrt p$
    • 特征值 1 对应特征向量有 $D-1$ 个
  • 则 $\chi^2$ 统计量依分布收敛于自由度为 $D-1$ 的卡方分布

  • 可据此构造统计量进行卡方检验,检验实际值实际分布频率 $(a_1,\cdots,a_D)$ 是否符合该分布

    • 构造卡方统计量 $\chi^2 = \sum_{d=1}^D \frac {(x_d - na_d)^2} {na_d}$
    • 则卡方统计量在随机变量满足多项分布情况下依分布收敛于自由度为 $D-1$ 的卡方分布

Pywin32 设备

win32print

  • 参数
    • level:返回信息类型
      • 1:列表,无值含义说明
      • 2-5:内容逐渐省略的字典,键值对表示值含义、值
    • hPrinterwin32print.OpenPrinter 返回的打印机句柄
    • hdcwin32gui.CreateDC 返回打印机设备上下文句柄
    • pPrinterwin32print.GetPrinter 返回的 PRINTER_INFO_* 字典

打印机

  • win32print.OpenPrinter(printer, Defaults):获取指定打印机的句柄
  • win32print.GetPrinter(hPrinter, Level):获取打印机相关信息
    • Level:信息展示格式,一般设置为 2 以字典形式返回
  • win32print.GetDevicesCaps(hdc, Index):获取设备上下文相关的参数、设置
    • Index 参数代号,可以通过 win32con. 获取
    • 将打印机句柄作为 hdc 传递时,正常执行但返回结果始终为 0
  • win32print.SetPrinter(hPrinter, Level, pPrinter, Command):改变打印机配置、状态
    • Command:发送给打印机的命令,可以通过 win32print.PRINTER_CONTROL_* 查看
  • win32print.EnumPrinters(flags, name, level):枚举打印机
    • flags:指定打印机类型,可以通过 win32print.PRINTER_ENUM_<type> 获取相关类型枚举值
      • 可设置为 6 以枚举 localconnections 类型设备
  • win32print.GetDefaultPrinter/win32print.GetDefaultPrinterW
  • win32print.SetDefaultPrinter/win32print.SetDefaultPrinterW

打印机属性设置

  • 打印机属性设置方式

    1
    2
    3
    4
    5
    6
    // 获取打印相关属性
    properties = win32print.GetPrinter(hPrinter, 2)
    devmode = properties["pDevMode"]
    // 修改属性设置
    properties["pDevMode"] = devmode
    win32print.SetPrinter(hPrinter, 2, properties, 0)
  • 打印机属性常用设置

    • devmode.Color:彩印
      • 可通过 win32con.DMCOLOR_<XXX> 查看枚举值
    • devmode.PaperSize:纸张尺寸
      • 可以通过 win32con.DMPAPER_<XXXX> 查看枚举值
      • 指定此属性时,devmode.PaperLengthdevmode.PaperWidth 不生效
    • devmode.PaperLength:纸张长,单位毫米
    • devmode.PaperWidth:纸张宽,单位毫米
    • devmode.Duplex:单双面(双面分为 flip overflip up
      • 可通过 win32con.DMDUP_<XXXX> 查看枚举值
    • devmode.Orientation:打印方向,即横向、纵向
      • 可通过 win32con.DMORIENT_<XXXX> 查看枚举值
      • 真实打印时影响不大,打印至 pdf 文件时、双面打印时有影响
    • devmode.MediaType:纸张类型
    • devmode.DefaultSource:纸张来源

打印

GDI 打印

  • win32print.StartDocPrinter(hPrinter, level, tuple):通知打印 spool 将有文件加入
    • hPrinterwi32print.OpenPrinter 返回的打印机句柄
    • level:文档信息结构,此处仅支持 1 (元组)
    • tuple:按 level 指定格式设置的文档信息
      • docName:文档名
      • outputFile:输出文件名
      • dataType:文档数据类型
  • win32print.EndDocPrinter(hPrinter):结束打印机的打印任务
    • win32print.WriterPrinter 调用后使用
  • win32printer.AbortPrinter(hPrinter):删除打印机的 spool 文件
  • win32print.StartPagePrinter(hPrinter):通知打印 spool 一页将被打印
  • win32print.EndPagePrinter(hPrinter):结束打印 job 中的一页
  • win32print.WritePrinter(hPrinter, buf):将 buf 复制到打印机
    • 适合复制 raw PostscriptsHPGL 文件

GDI 打印

  • win32print.StartDoc(hdc, docinfo):在打印机设备上下文上开始 spooling 打印任务
    • hdcwin32gui.CreateDC 返回的设备上下文句柄
    • docinfo:指定打印任务参数,四元组
      • DocName:文档名
      • Output:输出文件名,仅在输出至文件时需要,正常打印时可设置为 None
      • DataType:数据类型,如:RAWEMF、TEXTNone` 使用默认
      • Type:操作模式,可选值 DI_APPBANDINGDI_ROPS_READ_DESTINATION0
  • win32print.EndDoc(hdc, docinfo):在打印机设备上下文上结束 spooling 打印任务
  • win32print.AbortDoc(hdc):取消打印 job
  • win32print.StartPage(hdc):在打印机设备上下文上开始一页
  • win32print.EndPage(hdc):在打印机设备上下文上结束一页

打印任务

  • win32print.EnumJobs(hPrinter, FirstJob, NoJobs, Level):枚举打印机上的打印 job
  • win32print.GetJob(hPrinter, JobID, Level):获取打印 job 的信息
  • win32print.SetJob(hPrinter, JobID, Level, JobInfo, Command):暂停、取消、恢复、设置优先级
    • Command:指定设置的内容,可以通过查询 win32print.JOB_CONTROL_<XXXX> 查看枚举值

打印示例

图片打印

  • 直接使用 win32gui.CreateDC

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 创建打印机上下文
    hdc = win32gui.CreateDC("WINSPOOL", printer_name, None)
    # 打开图像文件,并创建位图
    bmp = Image.Open(filename)
    dib = ImageWin.Dib(bmp)
    # 在上下文上打开文件、文件页
    win32print.StartDoc(hdc, 1, ("", None, None, 0))
    win32print.StartPage(hdc)
    # 绘制位图
    dib.draw(hdc, (x1, y1, x2, y2))
    win32print.EndPage(hdc)
    win32print.EndDoc(hdc)
    win32gui.DeleteDC(hdc)
  • 使用 win32ui.CreateDC

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 创建未初始化设备上下文
    hdc = win32ui.CreateDC()
    # 初始化上下文
    hdc.CreatePrinterDC(printer_name)
    hdc.StartDoc(filename)
    hdc.StartPage()
    bmp = Image.Open(filename)
    dib = ImageWin.Dib(bmp)
    # 获取句柄,并绘制
    dib.draw(hdc.GetHandleOutput(), (x1, y1, x2, y2))
    hdc.EndPage()
    hdc.EndDoc()
    hdc.DeleteDC()
  • 结合 win32gui.CreateDCwin32ui.CreateDC

    1
    2
    3
    4
    # 可以设置 `PDEVMODE`
    g_hdc = win32gui.CreateDC("WINSPOOL", printer_name, dev_mode)
    hdc = win32gui.CreateDCFromHandle(g_hdc)
    # 之后同上

Pywin32 应用模块

win32com

win32com.client

win32com.client.Dispatch

Word.Application

  • 创建、打开文档

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 应用对象:word应用
    app = win32com.client.Dispatch("Word.Application")
    # 文档对象
    doc = app.Documents.add()
    doc = app.Documents.Open("/path/to/file")
    # 窗口对象:文档可以在多个窗口中展示(`View`栏中可找到)(不是打开两次文档)
    window = app.windows(winNo)
    window = doc.windows(winNo)
    # 视图对象:窗口的视图属性(全部显示,域底纹,表格虚框)
    view = window.view
  • Selection 对象:选区,文档中高亮的选择区域、插入点

    • 每个窗口有自身的 Selection
    • 窗口和相应的 Selection 同时只有一个被激活
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    # 当前激活窗口的选区
    s = app.Selection()
    # 1窗口的选区
    s1 = app.Windows(1).Selection
    # 替换选区内容,选区变为输入文本整体
    s.Text = "Hello, world!"
    # 输入内容,选区变为文本后插入点
    s.TypeText("hello, world!")
    # 拷贝选区
    s.Copy()
    # 粘贴内容至选区
    s.Paste()
    # 变换选区
    s.Start = 0
    s.End = 1
    # 删除
    s.Delete()
    # 全选
    s.WholeStory()
    # 移动选区:<wdunits>:移动单位:1-字符,
    s.MoveLeft(<wdunits>, <nums>)
    s.MoveRight()
  • Range 对象:连续区域,由 <start><end> 位置定义

    • 区分文档不同部分
    • Range 独立于 Selection
    • 可以定义多个 Range
    • 属性、方法类似 Selection
    1
    2
    r = doc.Range(<start>, <end>)
    r = s.Range()
  • Font 对象:字体属性(名称、字号、颜色等)

    1
    2
    3
    4
    font = s.Font
    font = r.Font
    font.name = "仿宋"
    font.size = 16
  • ParagraphFormat 对象:段落格式(对齐、缩进、行距、边框底纹等)

    1
    2
    3
    4
    5
    6
    7
    8
    pf = s.ParagraphFormat
    pf = r.ParagraphFormat
    # 对齐方式:0-左对齐,1-居中对齐,2-右对齐
    pf.Alignment = 0
    # 行间距:0-单倍,1-1.5倍,2-双倍
    pf.LineSpacingRule = 0
    # 左缩进:单位:磅
    pf.LeftIndent = 21
  • PageSetup 对象:页面设置(左边距、右边距、纸张大小)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ps = doc.PageSetup
    ps = s.PageSetup
    ps = r.PageSetup
    # 上边距:单位:磅(1cm = 28.35磅)
    cm2pound = 28.35
    ps.TopMargin = 79
    # 页面大小:6-A3,7-A4
    ps.PageSize = 7
    # 布局模式
    ps.LayoutMode = 1
    # 行字符数
    ps.CharsLine = 28
    # 行数:自动设计行间距
    ps.LinesPage = 22
  • 样式集:文档中内置、用户定义的样式

    1
    2
    3
    4
    5
    styles = doc.Styles
    # 获取样式:-1-正文,-2-标题1,-3-标题2,-4-标题3,-32-页眉,-63-标题
    normal = styles(-1)
    normal.Font.Name
    normal.Font.Size = 16

Pywin32 图形化模块

win32gui

  • win32gui 提供对原生 win32 GUI API 的接口

Device Context

  • win32gui.CreateDC(Driver, Device, InitData):为打印机、显示器创建设备上下文
    • Driver:显示器、打印机供应商名称
    • Device:设备名,如打印机名称
    • InitDataPyDEVMODE 指定打印参数
  • win32gui.CreateCompatibleDC(hdc):创建兼容指定设备的内存设备上下文
    • hdc:上下文句柄
  • win32gui.SetMapMode(hdc, MapMode):设置逻辑(页空间)单位至设备(空间)单位的映射方式
    • MapMode:映射方式,可通过 win32con.MM_<XXXX> 查看枚举值
  • win32gui.SetViewportExtEx(hdc,XExtent,YExtent):设置 DC 可视区域的 extent
    • XExtent/YExtentX/Y 方向逻辑长度
  • win32gui.SetWindowExtEx(hdc,XExtent,YExtent):设置 DC 窗口的长度
  • win32gui.SetWindowOrg(hdc,X,Y):设置 DC 可视区域起始位置
    • X/YX/Y 方向的逻辑坐标
  • 设置逻辑长度即将 DC 的可视区域空间进行线性变换(映射),而避免对需展示信息进行线性变换
  • viewport 是整个可视区域,window 是可是区域中用于展示信息的部分,windowOrg 则是 window 在信息中的偏移

窗口

  • win32gui.EnumWindows(callback, ctx):遍历所有窗口

    1
    2
    3
    4
    5
    6
    def winEnumHandler(hwnd, ctx):
    if win32gui.IsWindow(hwnd) and win32gui.IsWindowsEnabled(hwnd) and wind32gui.IsWindowVisible(hwnd):
    print(hwnd, win32gui.GetWindowText(hwnd))
    ctx.append(hwnd)
    hwnd_list = []
    win32gui.EnumWindows(winEnumHandler, hwnd_list)
  • win32gui.EnumChildWindows(parent_hwnd, callback, ctx):遍历窗口的子窗口

  • win32gui.ShowWindow(hwnd, status):根据status设置窗口状态

    |常量|大小|显示状态|激活状态| |——-|——-|——-|——-| |win32con.SW_HIDE|不变|隐藏|不变| |win32con.SW_MAXSIZE|最大化|不变|不变| |win32con.SW_MINISIZE|最小化|不变|不变| |win32con.SW_RESTORE|恢复正常|不变|不变| |win32con.SW_SHOW|不变|显示|激活| |win32con.SW_SHOWMAXIMIZED|最大化|显示|激活| |win32con.SW_SHOWMINIMIZED|最小化|显示|激活| |win32con.SW_SHOWNORMAL|恢复正常|显示|激活| |win32con.SW_SHOWMINNOACTIVE|最小化|显示|不变| |win32con.SW_SHOWNA|不变|显示|不变| |win32con.SW_SHOWNOACTIVE|恢复正常|显示|不变|

  • win32gui.SetForegroundWindow(hwnd)

win32ui

  • win32uiwin32gui 差别
    • win32gui 是对微软底层接口的直接封装
    • win32ui 则是对 win32gui

Device Context

  • win32ui.CreateDC():创建未初始化的设备上下文
  • win32ui.CreateDCFromHandle(handle):从句柄中创建上下文

Pywin32 接口

说明

  • pywin32 包是对 windows 提供接口的封装,和 C/CPP 接口内容相近

win32api

Shell

  • win32api.ShellExecute(hwnd, op, file, params, dir, bShow)
    • hwnd:父窗口句柄
    • op:操作,"open""print"
    • file:需要执行操作的文件
    • params:待执行操作的文件为可执行文件时,需要传递的参数
    • dir:应用执行的初始文件夹
    • bShow:应用打开时是否展示

Keyboard

  • win32api.keybd_event(bVk, bScan, dwFlags, dwExtraInfo) )
    • bVk:虚拟键码,可通过 win32con.VK_<KEY> 获取
    • bScan:硬件扫描码,一般设置为 0
    • dwFlags:一般设置为 0,表示按键按下
      • win32con.KEYEVENTF_EXTENDEDKEY
      • win32con.KEYEVENTF_KEYUP:按键释放
    • dwExtraInfo:与击键相关的附加的32位值,一般设置为 0

常用等式

常用定理

Lucas 定理

  • $p < 10^5$:必须为素数

Holder 定理

$|x|^{*}_p = |x|_q$

  • $\frac 1 p + \frac 1 q = 1$

Random

线性同余法

线性同余法:产生伪随机数最常用方法

  • $d \leq m$:随机序列种子
  • $b \geq 0, c \geq 0, m \geq 0$:关系到产生随机序列的随机性能
    • $m$:应该取得充分大
    • $gcd(m ,b)=1$:可以取b为素数

未归类概念

Radial Basis Function

  • RBF 径向基函数:取值仅依赖到原点距离的实值函数,即 $\phi(x) = \phi(|x|)$

    • 也可以按照距离某中心点 $c$ 的距离定义,即 $\phi(x) = \phi(|x-c|)$
    • 其中距离一般为使用 $L_2$ 范数,即欧式距离
    • 函数 $\phi$ 一般与 $|x|$ 负相关
  • 径向基函数最初用于解决多变量插值问题

    • 即以各样本为中心创建多个径向基函数
    • 多个径向基函数加权加和即得到拟合的函数曲线,可用于函数插值

    rbf_for_interpolation

常见径向基函数

  • 定义 $r=|x-x_i|$
  • 高斯函数

  • Multiquadric 多二次函数:

  • Inverse Quadric 逆二次函数:

  • Polyharmonic Spline 多重调和样条:

  • Thin Plate Spline 薄板样条(多重调和样条特例):