在线latex代码转化为公式_Python代码转Latex公式,⼀⾏代码
搞定
正⽂
你的代码中有数学公式吗?
数学是数据科学和机器学习的重要基础,数学运算的结果对于机器学习项⽬⽽⾔是⾄关重要的。在编写代码时,我们常常需要定义数学公式的计算形式。像 S=r^2 这样简单的数学公式,⼤概不会出现拼写错误。但如果是下⾯这样的公式呢?
图源:知乎⽤户 @马啃菠箩
还记得数学⽼师密密⿇⿇的板书吗?⼈们习惯于⼿写公式的运算过程。⽽如果计算机编程语⾔能够显⽰出类似于⼿写公式的计算过程,检查公式运算是否准确就可以轻松多了吧。
近⽇,GitHub 上⼀个名叫 handcalcs 的开源库就解决了这个问题。
handcalcs 库:将 Python 计算代码转换为 Latex 公式
handcalcs 库可将 Python 计算代码⾃动渲染为 Latex 公式,呈现⽅式类似于⼿写的公式计算:先编写符号公式,再代⼊具体数字,最后得出结果。
正如上⾯的演⽰样例所⽰,计算机能够识别的公式形式是:
⽽⼈们更习惯的是如下形式的数学公式:
handcalcs 的功能就是,将数学公式和运算过程以⼈们更容易理解的形式展⽰出来。
数学计算的结果往往会影响后续代码的运⾏过程,⽽复杂的数学公式更容不得⼀点错漏,因此对于包含较多复杂数学公式的 Python 代码,⽤ handcalcs 进⾏⾃查或许是有必要的。
如何使⽤ handcalcs?
那么,这个开源库要如何应⽤呢?
基本⽤法 1:Jupyter 单元格魔法函数
handcalcs 的设计初衷是在 Jupyter Notebook 或 Jupyter Lab 中作为单元格魔法函数来使⽤。
在线代码运行器⾸先,引⼊ handcalcs 模块并运⾏单元格:
der
接下来,在想要使⽤ handcalcs 的单元格上⾯添加⼀⾏魔法函数 %%render:
%%render
例如:
%%rendera = 2b = 3c = 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 就可以显⽰出希腊字母:
不只是简单的数学公式,复杂公式也不在话下,⽐如含有积分的公式:
缺陷
虽然⽤处多多,但项⽬作者表⽰,handcalcs 仍存在⼀些⼩缺陷。 ⾸先,handcalcs 并不适⽤于 collections 这种数据类型,例如 list、tuple、dict 等。 其次是在变量名⽅⾯,handcalcs 是针对 Jupyter 环境设计的。如果在 notebook 上重复使⽤变量名,则可能导致错误的数学运算。 handcalcs 虽然有些⼩瑕疵,但它对开发者⽽⾔颇有帮助。感兴趣的话,快来动⼿试⼀下吧!
--END--
本⽂转⾃: 机器之⼼

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。