Python 代码转 Latex 公式,这个开源库用一行代码帮你搞定
共 2614字,需浏览 6分钟
·
2022-07-22 10:29
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
数学是数据科学和机器学习的重要基础,数学运算的结果对于机器学习项目而言是至关重要的。在编写代码时,我们常常需要定义数学公式的计算形式。像 S=r^2 这样简单的数学公式,大概不会出现拼写错误。但如果是下面这样的公式呢?
图源:知乎用户 @马啃菠箩
还记得数学老师密密麻麻的板书吗?人们习惯于手写公式的运算过程。而如果计算机编程语言能够显示出类似于手写公式的计算过程,检查公式运算是否准确就可以轻松多了吧。
近日,GitHub 上一个名叫 handcalcs 的开源库就解决了这个问题。
项目地址:https://github.com/connorferster/handcalcs
handcalcs 库:将 Python 计算代码转换为 Latex 公式
handcalcs 库可将 Python 计算代码自动渲染为 Latex 公式,呈现方式类似于手写的公式计算:先编写符号公式,再代入具体数字,最后得出结果。
正如上面的演示样例所示,计算机能够识别的公式形式是:
而人们更习惯的是如下形式的数学公式:
handcalcs 的功能就是,将数学公式和运算过程以人们更容易理解的形式展示出来。
数学计算的结果往往会影响后续代码的运行过程,而复杂的数学公式更容不得一点错漏,因此对于包含较多复杂数学公式的 Python 代码,用 handcalcs 进行自查或许是有必要的。
如何使用 handcalcs?
那么,这个开源库要如何应用呢?
基本用法 1:Jupyter 单元格魔法函数
handcalcs 的设计初衷是在 Jupyter Notebook 或 Jupyter Lab 中作为单元格魔法函数来使用。
首先,引入 handcalcs 模块并运行单元格:
import handcalcs.render
接下来,在想要使用 handcalcs 的单元格上面添加一行魔法函数 %%render:
%render
例如:
%%render
a = 2
b = 3
c = 2*a + b/3
如果系统安装了 Latex 环境,你还可以将 notebook 导出成 pdf 格式文件。
基本用法 2:函数装饰器 @handcalc()
除了在 Jupyter cell 中使用外,在 Python 的函数中也可以使用 handcalcs。
首先导入 @handcalc() 装饰器:
from handcalcs.decorator import handcalc
然后编写函数。注意:函数必须 return locals():
@handcalc()
def my_calc(x, y, z):
a = 2*x / y
b = 3*a
c = (a + b) / z
return locals()
@handcalc(left: str = "", right: str = "", jupyter_display: bool = False)
返回一个由 (latex_code: str, locals: dict) 组成的元组,其中 locals 是函数命名空间范围内所有变量的字典。
其他功能
有些公式的参数量较多,如果按照常规的格式显示在一列,会浪费大量空间。而使用 handcalcs,只需添加注释标签# Parameters 就能让参数以三列的形式显示出来:
而有些公式的计算过程非常繁琐,也会占用大量显示空间,只需使用标签# Short 就能让运算过程的显示行数减少:
反之,如果你比较喜欢推导等式对齐的方式,可以使用# Long 标签显示。
有时你并不需要代入数值计算,只需要以符号的形式显示数学计算公式。那么,你需要使用# Symbolic 标签:
handcalcs 的功能本身还可以解决编程中的小问题,即在 Python 中,显示多个变量的值通常需要多个 print() 语句,而使用 handcalcs 能让事情变得简单许多:
很多开发者喜欢用_表示公式中的下标,handcalcs 可以将其显示出来,甚至多级下标也可以通过嵌套的形式得到显示。
数学公式中经常出现希腊字母(如「pi」、「eta」等),只要在代码中编写出对应的英文名,比如 alpha、beta,handcalcs 就可以显示出希腊字母:
不只是简单的数学公式,复杂公式也不在话下,比如含有积分的公式:
缺陷
好消息!
小白学视觉知识星球
开始面向外开放啦👇👇👇
下载1:OpenCV-Contrib扩展模块中文版教程 在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。 下载2:Python视觉实战项目52讲 在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。 下载3:OpenCV实战项目20讲 在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。 交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~