使用分析工具优化你的python代码
为什么要分析代码运行效率 分析代码的效率是计算机科学和软件开发中非常重要的一个方面,具体来说,时常分析你的代码有以下好处: 效率分析可以帮助你编写更经济高效的代码,减少资源的浪费,从而提高系统的性能和可伸缩性。 在设备资源紧张的情况,比如嵌入式开发、移动端开发等,高效的代码通常需要更少的硬件资源,这可以降低硬件采购和维护的成本。 高效的代码还可能减少开发和维护成本,因为它更容易理解和调试。在大数据、人工智能和科学计算等领域,需要处理大规模数据集。高效的代码可以加快数据处理速度,从而支持更快的决策和分析。 不高效的代码可能导致内存泄漏、CPU占用过高或其他资源浪费的问题。通过效率分析,可以及早发现和解决这些问题,确保应用程序稳定性和可靠性。 在分析代码效率的过程中,你可能需要重新审视代码,找出潜在的性能问题和不必要的复杂性。这有助于提高程序员的解决和分析能力,在代码的宏观运行层面重新认识计算机执行程序的过程。 那么该如何分析你的代码呢,line by line review?这恐怕不太行,工欲善其事,必先利其器。趁手的工具可以协助你高效地完成分析工作。 评价代码的运行效率有很多种方法 ...
利用pyo3加速python
pyo3:https://github.com/PyO3/pyo3 maturin:https://github.com/PyO3/maturin 两种方式: 在python代码中调用rust编写的模块 在rust代码中运行python 一、在python代码中调用rust编写的模块 PyO3 可用于生成本机 Python 模块。最简单的方法是使用 maturin。maturin 是一个用很少的配置可以构建和发布基于 Rust 的 Python 包的工具。通过以下步骤安装 maturin ,使用它生成并构建新的 Python 包,然后可以运行 Python 导入并执行包中的函数。 1 一个简单的示例 1.1 虚拟环境创建和maturin安装 首先,按照以下命令创建一个包含新 Python virtualenv 的新目录,并使用 Python 的包管理器 pip 将 maturin 安装到 virtualenv 中: 12345mkdir string_sumcd string_sumpython -m venv .envsource .env/bin/activate # 如果是w ...
polars读取csv数据时自定义列数据类型
默认情况下,CsvReader自动匹配csv文件中的数据类型: 1let df = CsvReader::from_path(filecsv)?.has_header(true).finish()?; Ok(df) 当csv文件中的某列出现前导0时,默认的读取会将这一列的类型设置为整数类型,且抹除前导0,这并不是我们想要的,因为前导0的列往往需要被解析为字符str类型。 有两种解决方案。 部分转换 将一些(不是全部)字段转换为 str 类型,这样做的前提是你事先知道要指定将哪些列转换。 项目的Cargo.toml依赖如下: 123[dependencies]polars = { version = "0.33.2", features = ["lazy","ndarray"] }smartstring = "1.0.1" 代码如下: 12345678910111213141516use polars::datatypes::DataType::Utf8;use polars::prelude::*;use smartstring::SmartString;use std::sync ...
10倍提升Tokio调度器的性能
原文:Making the Tokio scheduler 10x faster [译]10倍提升Tokio调度器的性能 我们一直在为Rust的异步运行时库Tokio进行下一个重大版本的努力。今天,调度器的完全重写作为一个PR提交了。结果是巨大的性能和延迟改进。一些基准测试显示了10倍的加速!一直不太清楚对于这种改进对于“全栈“使用案例的影响有多大,因此我们还测试了这些调度器改进对于Hyper和Tonic等使用案例的影响(剧透:效果非常好)。 为了准备开发新的调度器,我花了时间搜索有关调度器实现的资源。除了现有的实现之外,我没有找到太多相关资料。我还发现现有实现的源代码难以阅读。为了解决这个问题,我尽量使Tokio的新调度器实现尽可能清晰。我还写了这篇详细的文章来介绍调度器的实现,希望对其他处于类似开发位置的人有帮助。 文章从调度器设计的高级概述开始,包括抢占式调度器。然后详细介绍了新的Tokio调度器中所做的具体优化。 这些优化包括: 新的 std::future 任务系统 更好的运行队列 优化消息传递模式 任务窃取限制 减少跨线程同步 减少内存分配 减少原子引用计数 主要的 ...
毛选阅读——第五篇《星星之火,可以燎原》
“但我所说的中国革命高潮快要到来,决不是如有些人所谓“有到来之可能”那样完全没有行动意义的、可望而不可即的一种空的东西。它是站在海岸遥望海中已经看得见桅杆尖头了的一只航船,它是立于高山之巅远看东方已见光芒四射喷薄欲出的一轮朝日,它是躁动于母腹中的快要成熟了的一个婴儿。” 本文对马克思主义理论实践运用令人叹为观止。挑几点来说: 1.对于经验主义者进行了批判。 2.对于机会主义者进行了批判。无论是“左”倾盲动主义还是右倾悲观主义,教员指出“我们看事情必须要看它的本质”。 3.可以看出教员对于中国革命“以农村为中心”的思想并不是“一拍脑袋”就想出来的,这其中有一个形成和发展的过程。 首先是大革命失败后的革命力量应该如何发展和转移的问题,然后是革命工作的中心和根据地在哪里的问题,也即从哪里出发去夺取全国胜利的问题。对于前者,教员在《中国的红色政权为什么能够存在?》和《井冈山的斗争》两篇文章中给出了回答,即解决了革命力量难以在城市立足的情况下该向哪里发展和转移,解决了农村割据和坚持武装斗争的问题,解决了红色政权、工农群众关系的问题,解决了农村根据地的问题。至于后者,则是在本篇文章《星星之火, ...
毛选阅读——第四篇《井冈山的斗争》
1、一国之内,在四围白色政权的包围中,有一小块或若干小块红色政权的区域长期地存在,这是世界各国从来没有的事。 2、红军所以艰难奋战而不溃败,“支部建在连上”是一个重要原因。(1927 年 9 月,毛泽东率秋收起义部队挺进井冈山。途中,在深入分析南昌起义、秋收起义相继失败的原因后,他认为,“这是缺乏革命中心力量招致革命失败的血的教训”,决定在江西永新三湾村改编部队,实行“支部建在连上”。三湾改编从组织上确立了党对军队的领导,是把工农革命军建设成为无产阶级领导的新型人民军队的重要开端。) 本文写于 1928 年 11 月 25 日,全文共分两大部分六个问题,包括: (1)总结了湘赣边界的割据和八月失败的原因。指出中国红色政权区域在四周白色政权的包围中能够存在和发展,究其原因在于中国有买办豪绅阶级间的不断的分裂和战争,但也还需要具备一定条件:需要很好的群众、有很好的党、有相当力量的红军、有便利于作战的地势、有足够给养的经济力。在战略上,四周统治阶级内部发生破裂时期,是可以比较冒进的;但在统治阶级政权比较稳定的时期,则必须采取逐渐推进的战略。 (2)报告了割据地的现状。主要分为六个方面谈: ...
毛选阅读——第三篇《中国的红色政权为什么能够存在?》
写作背景是第一次国共合作的破裂和大革命的失败之后不久,国民党新军阀建立了反动统治,制造了疯狂屠杀的白色恐怖,全国革命突然转入黑暗。在危急关头,摆在党面前的任务,必须是有组织的退却,积蓄革命力量。但是党内以陈独秀为代表的一部分投降主义者,对革命前景感到悲观失望。 陈独秀主张党和无产阶级应以“国民会议”为中心口号,在国民党反动统治下进行“合法运动”,他们认为当时中国的性质已经变了,不是半殖民地半封建社会,而是资本主义占优势的社会了,因此,中国的资产阶级民主革命已经结束,无产阶级只有等待将来去进行社会主义革命。 在另一方面,“左”倾主义者则根本不承认大革命的失败,无视革命力量和反革命力量的力量差距,错误地认为中国的革命形势“不断高涨”,要求继续冒险进攻,这种思想使革命蒙受了巨大损失。“八月失败”之后,以林彪为代表在强敌残酷的进攻面前怀疑革命根据地发展的前途,提出了“红旗到底能打多久”的疑问,他们反对建立农村根据地,以农村包围城市、最后夺取城市的正确路线,主张使用轻便的流动游击方式去扩大影响。另有一些单纯强调城市工人斗争的同志,也怀疑红色政权能否存在和发展,这些右倾悲观的思潮在革命队伍里蔓延, ...
SVM
一、支持向量机 1 间隔与支持向量 支持向量机(support vector machines, SVM)是一种二分类模型,给定一组样本集,其中,-1表示反例,+1表示正例。分类学习最基本的想法就是基于样本集在样本空间中找到一个划分超平面,将不同类别的样本分开。但是,可能存在许多种超平面,这些超平面都可以将样本集分开,我们应该找到这些划分方法中最佳的那一个。 从直观上看,应该找到两类训练样本正中间的那个超平面,因为该划分超平面对训练样本局部扰动的容忍性最好。所谓容忍性,也可以叫做鲁棒性,如果训练集的局限性或者由于噪声等因素,训练集外的某些样本可能会更接近划分超平面,这将使之前的许多划分超平面出现错误,而正中间的超平面受到的影响最小。 在样本空间中,划分超平面可通过如下线性方程来描述: 其中为法向量,决定了超平面的方向,为位移项,决定了超平面与原点之间的距离。显然,划分超平面由和确定,将其记为,我们要找到的超平面是距离两类样本几何间隔最大的分离超平面(即正中间的那个超平面),因此需要样本到超平面距离的度量。 1.1 几何间隔 超平面与样本空间中的任意样本点到的几何间隔为: 考虑简单二 ...
为hexo博客更换pandoc渲染
参考文章: hexo 更换 markdown渲染器 @upupming/hexo-renderer-markdown-it-plus Butterfly 安裝文檔(四) 主題配置-2 Pandoc User’s Guide MathJax Documentation 1 我的需求 最近写的文章包括很多数学公式,但是当在typora中写好后,放到页面上却出现了各种显示上的问题,比如公式不全,公式超出文章边界等等一系列问题。这让我不得不寻找另外的文章渲染器。 2 hexo博客的渲染插件 首先上网查了一下hexo博客目前可用的渲染器,主要有以下几个。 2.1 hexo-renderer-marked hexo-renderer-marked是hexo默认的渲染器,不支持复杂的数学公式,正是我需要换掉的。 2.2 hexo-renderer-kramed hexo-renderer-kramed在默认渲染器的基础上添加了mathjax的支持,支持更多的数学公式,与原渲染器有冲突,需要先卸载默认的渲染器再使用它。 12npm uninstall hexo-renderer-marked ...
hexo自动更新文章修改时间(python实现版)
问题描述 在之前Github Action部署博客时遇到的文章更新时间问题,是通过js代码来解决的,参考hexo自动更新文章修改时间。但是该文章的js实现存在一些问题,因此这里改用python实现,核心的原理不变,都是通过读取文件的updated字段并修改来实现的。 代码 下面给出实现代码: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253import osimport refrom datetime import datetimeLINE_LIMIT = 20base_path = "./source/_posts"ALL_FILES = []def get_all_files(current_dir): files = os.listdir(current_dir) for file in files: new_path = os.path.join(current_dir, file) if os ...