知行编程网知行编程网  2022-07-20 16:00 知行编程网 隐藏边栏 |   抢沙发  80 
文章评分 0 次,平均分 0.0

Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定

来自 | 机器之心

数学是数据科学和机器学习的重要基础,数学运算的结果对于机器学习项目而言是至关重要的。在编写代码时,我们常常需要定义数学公式的计算形式。像 S=r^2 这样简单的数学公式,大概不会出现拼写错误。但如果是下面这样的公式呢?


Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定

图源:知乎用户 @马啃菠箩


还记得数学老师密密麻麻的板书吗?人们习惯于手写公式的运算过程。而如果计算机编程语言能够显示出类似于手写公式的计算过程,检查公式运算是否准确就可以轻松多了吧。


近日,GitHub 上一个名叫 handcalcs 的开源库就解决了这个问题。


项目地址:https://github.com/connorferster/handcalcs


handcalcs 库:将 Python 计算代码转换为 Latex 公式


handcalcs 库可将 Python 计算代码自动渲染为 Latex 公式,呈现方式类似于手写的公式计算:先编写符号公式,再代入具体数字,最后得出结果。


Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定


正如上面的演示样例所示,计算机能够识别的公式形式是:


Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定


而人们更习惯的是如下形式的数学公式:


Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定


handcalcs 的功能就是,将数学公式和运算过程以人们更容易理解的形式展示出来。


数学计算的结果往往会影响后续代码的运行过程,而复杂的数学公式更容不得一点错漏,因此对于包含较多复杂数学公式的 Python 代码,用 handcalcs 进行自查或许是有必要的。


如何使用 handcalcs?


那么,这个开源库要如何应用呢?


基本用法 1:Jupyter 单元格魔法函数


handcalcs 的设计初衷是在 Jupyter Notebook 或 Jupyter Lab 中作为单元格魔法函数来使用。


首先,引入 handcalcs 模块并运行单元格:



接下来,在想要使用 handcalcs 的单元格上面添加一行魔法函数 %%render:



例如:



如果系统安装了 Latex 环境,你还可以将 notebook 导出成 pdf 格式文件。


基本用法 2:函数装饰器 @handcalc()


除了在 Jupyter cell 中使用外,在 Python 的函数中也可以使用 handcalcs。


首先导入 @handcalc() 装饰器:



然后编写函数。注意:函数必须 return locals():




返回一个由 (latex_code: str, locals: dict) 组成的元组,其中 locals 是函数命名空间范围内所有变量的字典。


其他功能


有些公式的参数量较多,如果按照常规的格式显示在一列,会浪费大量空间。而使用 handcalcs,只需添加注释标签# Parameters 就能让参数以三列的形式显示出来:


Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定


而有些公式的计算过程非常繁琐,也会占用大量显示空间,只需使用标签# Short 就能让运算过程的显示行数减少:


Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定


反之,如果你比较喜欢推导等式对齐的方式,可以使用# Long 标签显示。


有时你并不需要代入数值计算,只需要以符号的形式显示数学计算公式。那么,你需要使用# Symbolic 标签:


Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定


handcalcs 的功能本身还可以解决编程中的小问题,即在 Python 中,显示多个变量的值通常需要多个 print() 语句,而使用 handcalcs 能让事情变得简单许多:


Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定


很多开发者喜欢用_表示公式中的下标,handcalcs 可以将其显示出来,甚至多级下标也可以通过嵌套的形式得到显示。


Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定


数学公式中经常出现希腊字母(如「pi」、「eta」等),只要在代码中编写出对应的英文名,比如 alpha、beta,handcalcs 就可以显示出希腊字母:


Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定


不只是简单的数学公式,复杂公式也不在话下,比如含有积分的公式:


Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定


缺陷


虽然用处多多,但项目作者表示,handcalcs 仍存在一些小缺陷。

首先,handcalcs 并不适用于 collections 这种数据类型,例如 list、tuple、dict 等。

其次是在变量名方面,handcalcs 是针对 Jupyter 环境设计的。如果在 notebook 上重复使用变量名,则可能导致错误的数学运算。

handcalcs 虽然有些小瑕疵,但它对开发者而言颇有帮助。感兴趣的话,快来动手试一下吧!

<section data-brushtype="text" style="padding-right: 0em;padding-left: 0em;white-space: normal;letter-spacing: 0.544px;color: rgb(62, 62, 62);font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;widows: 1;word-spacing: 2px;caret-color: rgb(255, 0, 0);text-align: center;"><strong style="color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;"><span style="letter-spacing: 0.5px;font-size: 14px;"><strong style="font-size: 16px;letter-spacing: 0.544px;"><span style="letter-spacing: 0.5px;">—</span></strong>完<strong style="font-size: 16px;letter-spacing: 0.544px;"><span style="letter-spacing: 0.5px;font-size: 14px;"><strong style="font-size: 16px;letter-spacing: 0.544px;"><span style="letter-spacing: 0.5px;">—</span></strong></span></strong></span></strong></section><pre><pre><section style="letter-spacing: 0.544px;white-space: normal;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;"><section powered-by="xiumi.us"><section style="margin-top: 15px;margin-bottom: 25px;opacity: 0.8;"><section><section style="letter-spacing: 0.544px;"><section powered-by="xiumi.us"><section style="margin-top: 15px;margin-bottom: 25px;opacity: 0.8;"><section><section style="margin-bottom: 15px;padding-right: 0em;padding-left: 0em;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 25.5938px;letter-spacing: 3px;text-align: center;"><span style="color: rgb(0, 0, 0);"><strong><span style="font-size: 16px;font-family: 微软雅黑;caret-color: red;">为您推荐</span></strong></span></section><p style="margin: 5px 16px;padding-right: 0em;padding-left: 0em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;">深度学习框架简史:未来十年迎来黄金时期<br  /></p><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;">吃透空洞卷积(Dilated Convolutions)<br  /></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;"><span style="font-size: 14px;">13个算法工程师必须掌握的PyTorch Tricks</span></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;"><span style="font-size: 14px;">吴恩达上新:生成对抗网络(GAN)专项课程</span></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;">从SGD到NadaMax,十种优化算法原理及实现</section></section></section></section></section></section></section></section></section>

Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享