python 正则表达式
Python 中一类主要的处理对象就是字符串,如何从字符串中筛选特定模式的子字符串就需要正则表达式。使用正则表达式的模式和字符串既可以是 Unicode 字符串(str),也可以是 8 为字节串(bytes)。本节介绍如何在 Python 中使用正则表达式。
正则表达式调用格式123456789101112import rere_exp = re.compile(r'xxx', flags=flag)re_exp.match(str_instance)re_exp.findall(str_instance)re_exp.search(str_instance)re_exp.split(str_instance)# or (除了上面编译后在匹配,还可以采用下面的合成形式,实际上内部是采用上面的步骤)re.match(r'xxx', str_instance, flags=flag)re.findall(r'xxx', str_instance, flags=flag)...
其中,re 是 python 内置的正则表达式模 ...
python 中 import 介绍
Python 中从其他模块或库中导入方法或模块的方法是利用 import 关键字,但是,当工程比较复杂时,比如分成多个类别的库;当代码需要在 jupyter 中调用工程中的模块时,工程中各模块的互相引用就显得非常重要,如果导入模块的姿势不对,将导致程序无法运行。本篇总结常用的导入方法,对 import 关键字进行介绍。
import 常规的导入方法这里不再重复,直接介绍复杂工程中或多种运行方式(命令行、ipython、jupyter 等)下模块的导入。
工程结构我这里创建了一个测试工程,目录结构如下:
123456789101112$ tree mytestmytest├── p1│ ├── __init__.py│ └── q1.py└── p2 ├── __init__.py ├── q2.py ├── q3.py └── q4.py2 directories, 6 files
其中,mytest 是工程名字,p1 和 p2 分别是两个库,里面分别有模块 q1,q2 和 q3,这里给出他们的内容:
12345678910111213141516 ...
deeplabcut 位姿标注软件的安装与使用
深度学习模型需要大量的训练数据,特别是标注数据。数据的标注非常重要,这对标注软件提出了很高的要求,易用、免费、高效的标注软件是深度学习从业人员的必备工具。deeplabcut 是一款面向位姿识别的标注软件(也可以进行模型训练),它开源、高效、易用,本篇介绍该软件的安装与简单使用。
deeplabcut 的安装假设已经按照好了 miniconda,下面介绍安装 deeplabcut
12345678git clone https://github.com/DeepLabCut/DeepLabCut.gitcd DeepLabCut/conda-environments# 如果不想克隆源代码仓库,可以直接从官网下载配置文件wget http://www.mackenziemathislab.org/s/DEEPLABCUT.yamlconda env create -f DEEPLABCUT.yaml
deeplabcut 的使用123456conda env listconda activate DEEPLABCUTpythonw -m deeplabcut# 或者,会将后台信息打 ...
Linux shell 编程基础
shell 是一个用 C 编写的程序,是用户与系统内核之间的桥梁。其提供了一个界面,用户通过该界面访问操作系统的内核服务。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。其实,shell 也是一种解释性的程序设计语言,用户通过编写 shell 脚本在 Linux 上进行自动运维等。常见的 Linux shell 种类很多,如 Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh)等,国内常用的是 /bin/bash,也是大多数 Linux 系统默认的 shell。在一般情况下,人们并不区分 Bourne Shell 和 Bou ...
linux 利用 top 命令进行动态监控
Linux 系统在运行中可能会出现各种情况,如内存占用过多、cpu 占用过大等,这些都会影响 Linux 系统的运行,导致用户体验降低,如何查看、监控 Linux 系统中的程序运行情况,并停止内存占用多、cpu 占用大的进程。本篇介绍 top 命令(类似于 Windows 中的任务管理器),实现此目的。
top 命令介绍简单的在命令后输入 top 命令查看当前系统进程情况。
1234567top - 15:32:30 up 4 days, 58 min, 2 users, load average: 1.15, 1.28, 1.31Tasks: 959 total, 3 running, 611 sleeping, 0 stopped, 0 zombie%Cpu(s): 1.4 us, 0.1 sy, 0.3 ni, 97.8 id, 0.4 wa, 0.0 hi, 0.1 si, 0.0 stKiB Mem : 97398976 total, 81255760 free, 3827788 used, 12315424 buff/cacheKiB S ...
ubuntu 安装 tcping
ping 命令能够帮助我们测试两台主机之间的网络是否畅通。但是,当目标主机的 ICMP 协议端口都关闭的时候,无法通过 ping 命令达到目标。一台主机只要是需要连接服务,那么它一定会开启 tcp 协议的某个端口,因此,我们可以通过基于 tcp 协议的 ping 命令 tcping 来获知两台主机是否网络联通。本篇以 Ubuntu 18.04 为例介绍如何安装 TCPing,以及如何使用它探测网络是否联通。
安装 TCPing12345sudo apt update# centos 可以使用 yum 包管理工具安装sudo apt install tcptraceroute wget bcsudo wget http://www.vdberg.org/\~richard/tcpping -O /usr/bin/tcpingsudo chmod +x /usr/bin/tcping
使用 TCPing使用方法:
12345678Usage: tcping [-d] [-c] [-C] [-w sec] [-r secs] [-q num] [-x count] ipaddress ...
汉宁窗和汉明窗
窗函数在信号处理中是指一种除在给定区间之外取值均为 0 的实函数。任何函数与窗函数之积仍为窗函数,相乘的结果就像透过窗口”看“其他函数一样。常见的窗函数有矩形窗、汉宁窗(Hann window)和汉明窗(Hamming window),这在目标跟踪中也有相应的应用,如在孪生网络相应图中约束目标出现的位置。
Hann 窗和 Hamming 窗可以用如下的公式统一表示:$$w(n) = a_0 - (1 - a_0) \cdot \cos(\frac{2 \pi n}{N - 1}), 0 \leq n \leq N - 1$$当 $a_0 = 0.5$ 时,叫作 Hann 窗;当 $a_0 = 0.53836$ (更精确来说是 $25/46$)时,称作 Hamming 窗。
Hann 窗汉宁窗公式如下:$$w(n) = 0.5(1 - \cos(\frac{2 \pi n}{N - 1}))$$汉宁窗(Julius von Hann)有时也称为”Hanning“窗、余弦窗。从减小泄漏观点出发,汉宁窗优于矩形窗。但汉宁窗主瓣加宽,相当于 ...
python 中 print 函数的本质
python 的打印输出本质上是先将内容存入缓冲区,然后在接收到触发机制后才会将缓冲区的内容输出到控制台。本篇介绍 print 函数,了解它的本质,将有助于掌握 python 中信息流的转换与输出。
sys.stdout.writeprint 函数的底层是调用 sys.stdout.write 函数。关于 sys.stdout.write 函数,官网信息如下:
1234567Docstring:Write to current stream after encoding if necessaryReturns-------len : int number of items from input parameter written to stream.
解释为将内容(必须是字符串)写入到信息流中,其实是写入到缓冲区中。当我们想要将缓冲区里的内容打印输出到控制台时,需要使用函数 sys.stdout.flush,即触发发送机制。
12345Signature: sys.stdout.flush()Docstring:trigger actual zmq sendsend wil ...
搭配 nginx、cloudflare 和 acme.sh 让网站走 https 协议
d7420555dbd47e034be0c72be203a7e36fc0f94408e2bfa8ad9536e5d1c877c6507ebd68f55f5a97fc6f38aa20e8c188b3872a9e29de7ef2435ffe9546d0f8bcb7bd182a393f4c138337a2c98b72d095e35d24a941c360d674cbd4e0d943cedef463b7c6b57e479c0ee919fb4a51a9d3d4391396809787539d22b8a889e5a7ee8815e984a0d7e00376718219e850c183eb0b947eec7d82554b2eae7be93dbcbeeef08012a352bc749ef7bbe2259c9c7c1b6846d0b5dec3804cd53f4ddeb115c7e861f9d749915e728999ce5167f0455e27e1193686806db84a7be012a8b6fcb4e12def49b304edd16320faa8b392303d40769abfaafe96823 ...
python 的 numpy.meshgrid 方法
numpy 中的 meshgrid() 函数能够生成坐标网格点,作为后续操作的输入,如画二元函数等高线图等。但它的理解却有些困难,本篇以 Jupyterlab 为平台演示,帮助理解该函数。
直观理解请看下图,矩阵 (1) 为输入,其中[1, 2, 3] 为 $x$ 轴坐标,[6, 5, 4] 为 $y$ 轴坐标,里面的点 $\cdot$ 为有待求得的网格点。矩阵 (2) 为网格点矩阵,每个元素为该坐标处的 $(x, y)$ 坐标。两个矩阵 ($xv$), ($yv$) 分别为 np.meshgrid() 函数返回的 $x$ 坐标点矩阵和 $y$ 坐标点矩阵。
$$\begin{matrix} 6 & . & . & . \\ 5 & . & . & . \\ 4 & . & . & . \\ & 1 & 2 & 3\end{matrix} \tag{1}$$
$$\left[\begin{matrix} (1, 6) & (2, 6) &a ...
pytorch 中数据加载器的锁页内存 pinned memory
PyTorch 中通过类 torch.utils.data.DataLoader 提供给模型训练数据集。该类中有一个参数 pin_memory 表示是否采用锁页内存。那什么是锁页内存,它有什么用?本篇对其进行介绍,以帮助大家了解其中的原理,设置合适的参数值,加快模型的训练。
什么是锁页内存我们都知道计算机除了 CPU 进行计算外,还离不开内存,因为内存中数据读取、交换比较快,所以,计算机程序运行时,将中间数据存放到内存中将大大提高程序的运行速度。但内存相对比较昂贵,因此,计算机的内存往往容量有限,在 Linux 中,常见有虚拟内存(通过 htop 命令可以查看 Swp 就是虚拟内存),其是在硬盘的每个区域划分出来的模拟内存的一块区域,在内存空间不足时,可以作为临时的内存空间使用,但虚拟内存毕竟是在硬盘上,数据的读取速度明显比内存慢。
在内存中,数据的存储分为两类,一类是锁页,一类不是锁页。锁页内存存放的数据在任何情况下都不会与虚拟内存进行数据交换。而不锁页内存当内存不足时,数据会存放在虚拟内置中。值得一提的是,GPU 的显存全部都是锁页内存。
设置 pin_memory了解了什么 ...