随笔分类 -  Python

摘要:Python:多进程并行编程与进程池Python的并行编程可以采用multiprocessing或mpi4py模块来完成。multiprocessing是Python标准库中的模块,实现了共享内存机制,也就是说,可以让运行在不同处理器核心的进程能读取共享内存。在基于共享内存通信的多进程编程中,常常通过加锁或类似机制来实现互斥。) 阅读全文
posted @ 2022-12-10 12:17 orion-orion 阅读(1212) 评论(0) 推荐(0) 编辑
摘要:Python:对程序做性能分析及计时统计如果只是想简单地对整个程序做计算统计,通常使用UNIX下的time命令就足够了。由于我用的是Mac系统,和Linux系统的输出可能有不同,不过关键都是这三个时间:user: 运行用户态代码所花费的时间,也即CPU实际用于执行该进程的时间,其他进程和进程阻塞的时间不计入此数字;system: 在内核中执行系统调用(如I/O调用)所花费的CPU时间。total(Linux下应该是real):即挂钟时间(wall-clock time),也称响应时间(response time)、消逝时间(elapsed time),是进程运行开始到结束所有经过的时间,包括了进程使用的时间片和进程阻塞的时间(例如等待I/O完成)。 阅读全文
posted @ 2022-11-27 17:28 orion-orion 阅读(951) 评论(0) 推荐(0) 编辑
摘要:Python:global、local与nonlocal变量声明在函数内的变量拥有一个local scope(局部作用域,即在函数内),我们将这类变量称为local(局部)变量。声明在函数之外的变量,也即它们都在gobal scope(全局作用域)中,我们将它们global(全局)变量。nonlocal变量常用在局部嵌套函数中将外层函数中的自由变量绑定到内层函数作用域。 阅读全文
posted @ 2022-11-27 01:01 orion-orion 阅读(795) 评论(0) 推荐(1) 编辑
摘要:Python:列表、数组及迭代器切片的区别及联系众所周知,Python中的列表和numpy数组都支持用begin: end语法来表示[begin, end)区间的的切片索引。numpy数组还支持用列表和numpy数组来表示切片索引,而列表则不支持。Pytorch的torch.utils.data.Dataset数据集支持单元素索引,但不支持切片。 阅读全文
posted @ 2022-07-10 22:07 orion-orion 阅读(775) 评论(0) 推荐(0) 编辑
摘要:Python:浮点数取整、格式化和NaN处理强转int类型会直接对浮点数的小数部分进行截断(无论是正还是负)。还有一种方法是math.ceil和math.floor。无论是正数还是负数,都遵循:ceil往数轴正方向取整,floor往数轴负方向取整。round原型为round(value, ndigits),可以将一个浮点数取整到固定的小数位。该函数对正数和负数都采取就近取整原则,而当某个值恰好等于两个整数间一半时,取整操作会取到离该值最近的那个偶数。 阅读全文
posted @ 2022-05-21 20:58 orion-orion 阅读(1875) 评论(0) 推荐(0) 编辑
摘要:Python:用argparse模块解析命令行选项我们在上一篇博客中介绍了Linux系统Shell命令行下可执行程序应该遵守的传参规范(包括了各种选项及其参数)。Python命令行程序做为其中一种,其传参中也包括了位置参数(positional和可选参数(optional)。Python程序中我们解析在命令行中提供的各种选项(选项保存在sys.argv中)可以使用argparse模块。 阅读全文
posted @ 2022-05-20 17:34 orion-orion 阅读(516) 评论(0) 推荐(2) 编辑
摘要:Python:解决Matplotlib保存图片显示不全问题保存图片的时候设置参数bbox_inches = 'tight',如:plt.savefig("Matplotlib/graph.png", bbox_inches = 'tight') 阅读全文
posted @ 2022-05-19 11:20 orion-orion 阅读(799) 评论(0) 推荐(0) 编辑
摘要:Python:用Pandas输出格式化HTML并高亮我们已知一个DataFrame记录了模型Model1、Model2在3个Epoch优化中的精度变化情况,现在我们像将其输出为html。我们发现这样并不美观。我们想要去除掉表格的边框,并使每个单元格对齐,可以为表格设置style属性再输出。如果我们想对各模型迭代过程中取得的最大精度进行高亮,可以调用apply()方法并传入一个回调函数。 阅读全文
posted @ 2022-05-19 10:14 orion-orion 阅读(1204) 评论(0) 推荐(0) 编辑
摘要:Python:conda install 和pip install的区别pip是个安装包的软件,conda是个环境管理的工具。conda能够安装多个python解释器,pip不行。conda install这种方式安装的库都会放在/Users/orion-orion/miniforge3/pkgs目录下。这样的好处是,当在某个环境下已经下载好了某个库,再在另一个环境中还需要这个库时,就可以直接从pkgs目录下将该库复制至新环境而不用重复下载。 阅读全文
posted @ 2022-05-13 22:32 orion-orion 阅读(978) 评论(0) 推荐(0) 编辑
摘要:Python:实用运维脚本编写(进程/文件/目录操作)Python在很大程度上可以对shell脚本进行替代。笔者一般单行命令用shell,复杂点的多行操作就直接用Python了。这篇文章就归纳一下Python的一些实用脚本操作。我们想要和文件名称和路径打交道时,为了保证获得最佳的移植性(尤其是需要同时运行与Unix和Windows上时),最好使用os.path中的函数。如果仅仅是想创建或解包归档文件,可以直接使用shutil模块中的高层函数。 阅读全文
posted @ 2022-05-12 14:45 orion-orion 阅读(1345) 评论(2) 推荐(1) 编辑
摘要:Python:用NetworkX生成并绘制(带权)无向图NetworkX是一个非常强大的网络科学工具,它封装了图的数据结构和许多经典图算法,也内置了许多可视化函数可供调用。首先我们需要对随机图进行生成。最经典的随机图当属我们在上一篇博客《Erdos-Renyi随机图的生成方式及其特性》中讲到的Erdős-Rény随机图了,我们这里选用其中的𝐺(n, p)形式,调用对应的API。 阅读全文
posted @ 2022-05-11 09:36 orion-orion 阅读(2430) 评论(1) 推荐(2) 编辑
摘要:Python:实现简单的递归下降Parser在上一篇博文中,我们介绍了用正则表达式来匹配对应的模式,以实现简单的分词器。然而,正则表达式不是万能的,它本质上是一种有限状态机(finite state machine,FSM), 无法处理含有递归语法的文本,比如算术运算表达式。要解析这类文本,需要另外一种特定的语法规则。我们这里介绍可以表示上下文无关文法(context free grammer)的语法规则巴科斯范式(BNF)和扩展巴科斯范式(EBNF)。实际上,小到一个算术运算表达式,大到几乎所有程序设计语言,都是通过上下文无关文法来定义的。对于简单的算术运算表达式,假定我们已经用分词技术将其转化为输入的tokens流。 阅读全文
posted @ 2022-04-30 17:06 orion-orion 阅读(771) 评论(0) 推荐(0) 编辑
摘要:Python:用re模块实现简易tokenizer分词(tokenization)任务是Python字符串处理中最为常见任务了。我们这里讲解用正则表达式构建简单的表达式分词器(tokenizer),它能够将表达式字符串从左到右解析为标记(tokens)流。要完成这样的分词操作,我们首先需要定义出所有可能的标记模式(所谓模式(pattern),为用来描述或者匹配/系列匹配某个句法规则的字符串,这里我们用正则表达式来做为模式),注意此处要包括空格whitespace,否则字符串中出现任何模式中没有的字符后,扫描就会停止。因为我们还需要给标记以NAME、EQ等名称,我们采用正则表达式中的命名捕获组来实现。 阅读全文
posted @ 2022-04-29 15:48 orion-orion 阅读(884) 评论(0) 推荐(0) 编辑
摘要:Python:range、np.arange和np.linspace的区别与联系range是python内置的一个类,该类型表示一个不可改变(immutable)的数字序列,常常用于在for循环中迭代一组特殊的数;numpy.arange是NumPy包的一个函数,它的功能与Python内置的range类似,但该类与Python内置的range区别有两点:一是支持小数参数,二是返回ndarray类型而非像range那样常常做为(隐式转换为)list类型使用;numpy.linspace也是Numpy内置的一个函数,它和numpy.arange类似,但是它不再是简单的[start, stop)左闭右开,也没有使用步长step,而是使用样本个数num。 阅读全文
posted @ 2022-03-21 22:21 orion-orion 阅读(1537) 评论(0) 推荐(0) 编辑
摘要:Python:用pyinstrument做性能分析在计算密集型计算或一些Web应用中,我们常常需要对代码做性能分析。在Python中,最原始的方法即是使用time包中的time函数(该函数以秒为计时单位)。但是一旦函数多了起来,这种方式显然过于繁杂。类似C语言中的cProfile,在Python中,也有专门的性能分析工具pyinstrument(该库非内置,需要使用conda/pip安装),我们在复杂的项目中可以使用它来代替简陋的time.time()。 阅读全文
posted @ 2022-03-21 14:50 orion-orion 阅读(1935) 评论(0) 推荐(0) 编辑
摘要:Python:用tqdm模块绘制进度条在计算密集型迭代计算中,我们常常需要知道当前的迭代轮次,最传统的方法就是打印当前迭代计数器的轮数。那有没有更好的方法呢?我们可以使用tqdm模块(非py内置,需要单独按照)来在控制台绘制进度条,这样更加直观。最简单的一种方法是直接做为迭代器使用,还有一种稍复杂的方法,就是自定义进度条计数器的更新。 阅读全文
posted @ 2022-03-21 11:01 orion-orion 阅读(744) 评论(0) 推荐(0) 编辑
摘要:Python:探究Matplotlib直方图绘制中的参数bins和rwidth我们在做机器学习相关项目时,常常会分析数据集的样本分布,而这就需要用到直方图的绘制。在Python中可以很容易地调用matplotlib.pyplot的hist函数来绘制直方图。不过,该函数参数不少,有几个绘图的小细节也需要注意。首先,我们假定现在有个联邦学习的项目情景。我们有一个样本个数为15的图片数据集,样本标签有4个,分别为cat, dog, car, ship。这个数据集已经被不均衡地划分到4个客户端(client)上。 阅读全文
posted @ 2022-02-03 19:10 orion-orion 阅读(9865) 评论(0) 推荐(2) 编辑
摘要:Python:当函数做为参数时的技巧下面我们在深度学习项目情境中展示用lambda函数嵌套法修改函数参数个数的应用。我们这是一个联邦学习项目,有多个client客户端,每个client中都有机器学习模型。我们现在有一份现有的祖传代码不能改动,该祖传代码中client类的初始化函数中需要传入模型类的初始化函数和优化器类的初始化函数(注意,不是模型的对象和优化器的对象),然后在client类的构造函数中完成模型对象的初始化和优化器对象的初始化。 阅读全文
posted @ 2022-02-02 19:34 orion-orion 阅读(162) 评论(0) 推荐(0) 编辑
摘要:Python:Python中的参数屏蔽我们时常会遇到这样的情形:我们有一个元素为indices的列表,想通过函数update_indices对其进行更新。不过有点特殊的是,我们想在update_indices中先将列表置空,然后再插入元素。不过,代码运行的结果会出乎我们意料。 阅读全文
posted @ 2022-02-02 19:08 orion-orion 阅读(292) 评论(0) 推荐(0) 编辑
摘要:Python:Python字符串中的r、u和转义字符Python中字符串前面我们经常看到加r(R)或u/(U)的前缀,而这两个符号是什么意思呢?r意为raw,表示不包含转义字符的原生字符串。r前缀最常见的用途是正则表达式,因为正则匹配的模式经常包含各种反斜杠等字符,我们不希望它被解析为转移字符,因此需要加上'r'。u(U)前缀表示字符串的编码方式为unicode。 阅读全文
posted @ 2021-12-10 22:46 orion-orion 阅读(6780) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示