机器心脏报告
编辑:小舟
你的代码里有数学公式吗?
它是数学数据科学和机器学习的重要基础,数学运算的结果对于机器学习项目至关重要。在编写代码时,我们经常需要定义数学公式的计算形式。像s=r 2这样简单的数学公式大概不会出现拼写错误。但是如果是下面这个公式呢?
来源:知乎用户@中中中中中中
还记得数学老师密密麻麻的板书吗?人们习惯了手写公式的运算过程。如果计算机编程语言能显示出类似手写公式的计算过程,那么检查公式运算是否准确就会容易得多。
最近GitHub上一个叫做handcalcs的开源库解决了这个问题。
项目地址:https://github.com/connorferster/handcalcs
handcalcs 库:将 Python 计算代码转换为 Latex 公式
Handcalcs库可以自动将Python计算代码渲染成Latex公式,类似于手写公式计算:先写符号公式,再代入具体数字,最后得到结果。
如上述演示示例所示,计算机可以识别的公式形式为:
而人们更习惯于以下形式的数学公式:
手算的作用是把数学公式和运算过程用更容易让人理解的形式表现出来。
数学计算的结果往往会影响后续代码的运行过程,复杂的数学公式容不得半点差错。因此,对于包含更复杂的数学公式的Python代码,可能有必要使用handcalcs进行自检。
如何使用 handcalcs?
那么,如何应用这个开源库呢?
基本用法 1:Jupyter 单元格魔法函数
Handcalcs最初被设计为在Jupyter笔记本或Jupyter实验室中用作细胞魔法功能。
首先,介绍handcalcs模块并运行单元:
导入handcalcs.render
接下来,将神奇的函数%%render添加到要使用handcalcs的单元格中:
% %渲染
例如:
%%rendera=2b=3c=2*a b/3
如果系统中安装了Latex环境,还可以将笔记本导出为pdf文件。
基本用法 2:函数装饰器 @handcalc()
除了在Jupyter cell中使用,还可以在Python函数中使用handcalcs。
首先,导入@handcalc()装饰器:
从handcalcs.decorator导入handcalc
然后写函数。注意:该函数必须返回locals():
@handcalc()def my_calc(x,y,z): a=2*x/y b=3*a c=(a b)/z返回局部变量()
@handcalc(left: str=' ',right: str=' ',jupyter_display: bool=False)
返回由(latex _ code:str,locals:ddict)组成的元组,其中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 虽然有些小瑕疵,但它对开发者而言颇有帮助。感兴趣的话,快来动手试一下吧!