在 Python 中使用 importlib 和 getattr 动态调用函数
Python 是一种动态编程语言。在编写 Python 代码时利用 importlib 能够动态的导入需要的模块,利用 getattr 能够获取模块的属性或方法,返回属性值和函数。本篇对它们进行介绍,并给出一个例子展示如何使用它们。
importlibimportlib 是一个模块,使用时需要首先导入该模块。
1import importlib
在代码中动态导入其他模块的方法
1expr_module = importlib.import_module("mymodule.test")
getattrgetattr 是内置函数,用于返回一个对象的属性值。
如,编写一个类:
123class Test: def __init__(self): self.name = 'test'
获取实例的属性值
12t = Test()getattr(t, 'name')
结果
1'test'
一个例子编写模块 primes.py,放到当前目录的 pyscripts 文件夹下
123456 ...
Python中NotImplementedError的使用
Python 是一种面向对象的编程语言,子类可以继承父类的方法。父类可以通过某种手段限制子类中必须重写父类的指定方法,否则报错。这种手段就是 NotImplementedError.
如果子类不重写父类的方法1234567891011class ParentClass: def nie_func(self): # 要求子类中必须实现该方法,否则在子类实例中不能调用该方法 raise NotImplementedError("parent class nie methods not implemented")class ChildClass(ParentClass): passcc = ChildClass()cc.nie_func()
结果如下:
123456789101112131415---------------------------------------------------------------------------NotImplementedError Traceba ...
单目标跟踪数据集
目标跟踪数据集有很多,这里按发布时间顺序汇集单目标跟踪数据集,给出链接以及数据集说明。
OTB年份:2013、2015
OTB 数据集是单目标跟踪最早数据集。分为 OTB-2013(51个视频)、OTB-2015 (在OTB-2013上增加视频,共98个视频,又名 OTB-100),其中 OTB-100 前 49 个视频又名 OTB-50. 虽然 OTB-100 只有 98 个视频,但是,其中两个视频 Skating2 和 Jogging 分别针对两个目标进行标注,可分别看作 2 个视频。因此,称为 OTB-100. 其中 Skating2 在 OTB-50 中,因此 OTB-50 事实上也包含 50 个标注视频。
相关博客:单目标跟踪OTB、VOT数据集介绍
相关文章:Y. Wu, J. Lim and M. -H. Yang, “Online Object Tracking: A Benchmark,” 2013 IEEE Conference on Computer Vision and Pattern Recognition, 2013, pp. 2411-2418, do ...
使用命令行更改苹果电脑的 hostname
更改苹果电脑名称可在系统便好设置里的共享编辑更改,但重启后终端上却没有发生变化,这篇介绍 Mac Book Pro 更改终端 hostname 方法。
打开终端,运行如下命令,其中 newhostname为你想设置的新名字。
123scutil --set ComputerName "newhostname"scutil --set LocalHostName "newhostname"scutil --set HostName "newhostname"
查看设置后的名字。
12345scutil --get HostName# 或者hostname# 或者查看所有上面的设置echo ComputerName LocalHostName HostName | xargs -n1 -t scutil --get
服务器关机自动发送通知邮件
我这里有个需求,就是服务器会因为不知道的原因(排除断电)导致关机,这种情况下,如果不能及时知道何时关机将会导致不能及时进行重启,并进行安全检查。这里通过撰写 Python 代码并设置服务,监测服务器是否关机并自动邮件通知。本篇以 Ubuntu 为例。
编写 python 代码编写 /home/jinzhongxu/shutdown_msg.py 模块
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#!/usr/bin/env python# -*- coding: utf-8 -*-# @Author : Jinzhong Xu# @Contact : jinzhongxu@csu.ac.cn# @Time : 2021/11/23 17:45# @File : shutdown_msg.py# @Software: PyCharmdef ...
把 Python 的 print 函数输出到文件
利用 Python 的 print 函数可以方便的打印输出,但是,这些输出不能够很好的给别人传看,特别是打印行数较多,又不便更改原模块的代码时。这里,给出一个方法,不动原模块,将打印输出到文件中。
所有打印都输入文件假设,我们打印输出的模块是 main.py 里的 inspect 函数。这里创建 test.py 模块
123456import sysfrom main import inspectsys.stdout = open('output.txt', 'w')inspect(ids_dir)sys.stdout.close()
或者
12345678import sysfrom main import inspectoriginal_stdout = sys.stdoutwith open('output.txt', 'w') as f: sys.stdout = f # Change the standard output to the file we created. insp ...
利用 PyQt5 开发 Python 图形用户程序
Python 作为一种高级编程语言,简洁高效,开发效率高。将 Python 与 JupyterLab 结合使用非常方便,也是我之前常采用的形式。但本篇主要介绍用 Python 开发桌面等应用程序,利用图形界面实现与用户交互。本篇将包含 Miniconda, PyQt5, pyqt5-tools, Qt Designer, pyinstaller 等。
安装需要的包首先,从官网下载 Miniconda,配置好开发环境,这时就可以使用 Python 了。
其次,从 Python packages 官网 安装 PyQt5 和 pyqt5-tools(PyQt6 在 2021年1月份已经发布,截止本篇文章,已经到 6.2.1,大家可以自己选择使用)。
12pip install PyQt5pip install pyqt5-tools
到目前,所安装的包已经足够开发 Python 图形用户程序,但设计图形界面不是那么直观,可利用下面的 Qt Designer 进行图形设计界面。打开方式:
1qt5-tools designer
另一种方式是,从网址 fman build system ...
反常积分与柯西主值
在讨论定积分时有两个默认的限制条件:一是积分区间有穷,二是被积函数有界。在实际问题中往往需要突破这些限制,如需要在无穷区间上进行积分,或求无解函数的积分(函数在积分区间的某点上无界)。此时,研究的积分称为反常积分(improper integral,或称为非正常积分,广义积分。原有的定积分为Riemann积分,或常义积分,记作$f\in R[a,b]$,表示函数$f$ 在闭区间$[a,b]$上黎曼可积)。在研究反常积分时常常研究其收敛性或发散性,这一点与数项级数一致。更进一步,含参量反常积分和函数项级数研究一致收敛性和发散性。
两类反常积分无穷积分无穷积分是第一类反常积分,指积分区间的上限或下限为无穷的积分。
设函数$f$定义在无穷区间$[a,+\infty]$上,且在任何有限区间$[a,u]$上可积。如果存在极限$$\lim_{u\to +\infty}\int^u_a f(x) \mathrm{d}x = J,$$则称此极限$J$为函数$f$在$[a,+\infty]$上的无穷限反常积分(简称无穷积分),记作$$J = \int^{+\infty}_a f( ...
Hexo 大括号渲染
Hexo 生成 markdown 撰写的博文中含有公式大括号 $\lbrace$ 和 $\rbrace$ 时,发布网站上大括号消失。本篇给出可能的原因,和解决方法。
可能原因在使用公式编辑大括号时,采用了如下的形式
1$ E = \min_{v \in V} \{u \in V | w(u,v) > 0\} $
$$E = \min_{v \in V} {u \in V | w(u,v) > 0}$$
解决方法把
1\{ \}
替换为
1\lbrace \rbrace
结果示例
1$ E = \min_{v \in V} \lbrace u \in V | w(u,v) > 0\rbrace $
$$E = \min_{v \in V} \lbrace u \in V | w(u,v) > 0\rbrace$$
参考链接
Hexo Next主题Mathjax 大括号渲染错误
匈牙利匹配算法
匈牙利匹配算法(Hungarian Matching Algorithm),也称为 Kuhn-Munkres 算法,是一个 $O\big(|V|^3\big)$ ($V$ 表示二分图的顶点集)算法,可用于在二分图中找到最大权重匹配,有时称为分配问题。匈牙利算法被文章 End-to-End Object Detection with Transformers 中提出 DETR 算法中所采用,用于匹配预测目标框与真实目标框。除此之外,该算法也在多目标跟踪、实例分割、多人3D位姿估计等领域中发挥作用。本篇对匈牙利算法进行简单讲解。
历史匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法,并推动了后来的原始对偶方法。美国数学家哈罗德·库恩于 1955 年提出该算法。此算法之所以被称作匈牙利算法,是因为算法很大一部分是基于以前匈牙利数学家 Dénes Kőnig 和 Jenő Egerváry 的工作之上创建起来的。
詹姆士·芒克勒斯在 1957 年回顾了该算法,并发现(强)多项式时间的复杂度。此后该算法被称为 Kuhn–Munkres 算法或 Munkres 分配算法。原始算法的 ...
深度学习中常用的正则化
Normalization 在深度学习中常被使用,它能够正则化神经网络中的输出数据,一定程度上消除内部协变量偏移(Internal Covariate Shift),加速网络训练,为初始化网络参数松绑,提高模型精度等。本篇介绍在深度学习中常用的正则化方法。
Batch NormalizationBatch Normalization 是对输入的的多个向量(即一批向量 $x_i,i=1,⋯,m$),对每个维度(特征)上进行正则化,也即每个神经元单独进行一批数据(分量)的正则化。首先计算该维度上的均值和标准差,然后该维度上各个分量减去均值再除以标准差。下面公式都是按照逐元素操作的。说白了,批正则化是针对每个神经元进行批次正则化。均值分母是批次大小。$$\mu_{\mathcal{B}} \leftarrow \frac{1}{m}\sum^m_{i=1} x_i$$
$$\sigma^2_{\mathcal B} \leftarrow \frac{1}{m}\sum^m_{i=1}(x_i - \mu_{\mathcal B})^2$$
$$\hat x_ ...