在数据科学与人工智能的应用中,Python无疑是流行的编程语言之一。从数据处理、算法构建到模型训练,Python几乎贯穿了每一个技术环节。然而,随着项目复杂性的增加,公式表达的需求也在增长。特别是当我们将算法公式化呈现给读者或评审时,清晰、美观的公式表达尤为重要。而Latex作为公式编辑的标准,拥有强大而广泛的应用。
不过,Python代码到Latex的转换往往手工繁琐,效率较低。在这种情况下,latexify可以让Python代码可以一键转化为Latex公式,使得代码与数学公式之间的转换变得流畅而便捷。
我们在《Handcalcs,让python科学计算过程更清晰》介绍类似功能,相对于Handcalcs 来说latexify更方便、功能更强大。从github 星星上可以看出latexify 更受欢迎。
latexify 是什么
latexify 是一个 Python 包,可以将一段 Python 源代码编译为对应的 LaTeX 表达式。
latexify 提供以下功能:
库函数,用于将 Python 源代码基于抽象语法树(AST)编译为 LaTeX 表达式。
使用IPython 类、装饰器(Decorators),用于美化显示已编译的函数。Notebook 内良好展现。
可以将python code 逆向为伪代码,方便展示算法,也支持数学符号。
安装 latexify
在 Notebook 中使用 latexify
latexify.function
装饰器函数可以将您的函数包装成相应的 LaTeX 公式进行美化显示。Jupyter kernel 会识别此包装器,并尝试以 LaTeX 格式显示,而不是原始函数。以下代码示例:
import math
import latexify
@latexify.function
def solve(a,b,c):
return (-b +math.sqrt(b**2-4*a*c))/(2*a)
solve
@latexify.function
def F(n):
if n==0:
return 0
elif n==1:
return 1
else:
return F(x-1)+F(n-2)
F
调用装饰器包装后的函数时,其行为与原始函数完全一致。
对装饰器包装后的函数应用 str
将返回对应的 LaTeX 源代码。
latexify.expression
的功能与 latexify.function
类似,但它在输出时不包含函数签名。
@latexify.expression
def
solve(a, b, c):
return (-b + math.sqrt(b**2 - 4 * a * c)) / (2 * a)
solve
直接获取 LaTeX 表达式
也可以使用 latexify.get_latex
,它接收一个函数并直接返回该函数对应的 LaTeX 表达式。latexify.get_latex
可以应用与 latexify.function
相同的参数。
def solve(a, b, c):
return (-b + math.sqrt(b**2 - 4 * a * c)) / (2 * a)
latexify.get_latex(solve)
使用简化公式和数学符号表示
latexify支持转LaTeX的两个重要参数:
reduce_assignments=True
:
use_math_symbols=True
:
这两个参数的结合使得生成的 LaTeX 表达式更加简洁美观,同时符合数学规范。
@latexify.function(use_math_symbols=True)
def greek(alpha, beta, gamma, Omega):
return alpha * beta + math.gamma(gamma) + Omega
greek
@latexify.function(reduce_assignments=True, use_math_symbols=True)
def transform(x, y, a, b, theta, s, t):
cos_t = math.cos(theta)
sin_t = math.sin(theta)
scale = np.array([[a, 0, 0], [0, b, 0], [0, 0, 1]])
rotate = np.array([[cos_t, -sin_t, 0], [sin_t, cos_t, 0], [0, 0, 1]])
move = np.array([[1, 0, s], [0, 1, t], [0, 0, 1]])
return move @ rotate @ scale @ np.array([[x], [y], [1]])
transform
生成伪代码
latexify.algorithmic
生成的是伪代码,这种格式特别适合用于算法的表达。伪代码以一种简洁明了的方式描述了算法的核心逻辑,而不需要关注具体的编程语法。通过使用伪代码能够更容易理解算法的步骤和思路,而不被实现细节所干扰;伪代码可以清晰地传达算法的意图,方便在学术论文、技术文档或教学材料中进行展示。
@latexify.algorithmic
def fib(x):
if x == 0:
return 0
elif x == 1
:
return 1
else:
return fib(x-1) + fib(x-2)
fib
@latexify.algorithmic
def collatz(x):
n = 0
while x > 1:
n = n + 1
if x % 2 == 0:
x = x // 2
else:
x = 3 * x + 1
return n
collatz
latexify 是一个强大的 Python 包,旨在简化 Python 代码转化 LaTeX 公式。通过使用装饰器,用户可以轻松将函数美化为对应的 LaTeX 表达式,生成清晰的公式和伪代码,特别适合数据科学和人工智能领域的算法展示。它不仅支持简化赋值和数学符号表示,还能以伪代码的形式表达算法逻辑,使得代码的表达更为直观和规范。