用 Python 编写 LaTeX
写 latex?用 Python 编码?用latexify(https://github.com/google/latexify_py)!
latexify是Google推出的一款出色的开源 Python 库,可将 Python 源代码编译为相应的 LaTeX 表达式。它还使用 IPython 以美观的方式打印已编译的函数。
这个库对于为论文编写代码的研究人员或想要记录其工作的人(即想要将 Jupiter 笔记本转换为 pdf 报告的数据科学家)非常有帮助。
本文将讨论如何使用该库并通过一些示例展示其功能。
安装依赖项
首先,我们安装 latexify;在 PyPI 上,它被列为latexify-py
%pip install latexify-py==0.2.0
加载库
%pip install latexify-py==0.2.0
我们在本文中使用的 latexify 版本是0.2.0。这里我们还引入了math一些数学函数。
例子
要使用 latexify,你所要做的就是latexify.function在你的函数上方包含装饰器,然后
显示 MathJax
要显示 MathJax,你必须包含函数的名称并运行该单元格。
这里我们定义了Sigmoid 函数,它是机器学习中常用的激活函数。
@latexify.function
def sigmoid(x):
return 1 / (1 + math.exp(-x))sigmoid
打印获取 LaTeX 表达式
打印该函数会给你底层表达式。
print(sigmoid)
\mathrm{sigmoid}(x) = \frac{{1}}{{1} + \exp{\left({-x}\right)}}
调用函数
当你调用该函数时,它仍按预期工作。
sigmoid(1)
0.7310585786300049
仅限表达
通过使用 latexify.expression 装饰器,它将只显示表达式。
@latexify.expression
def sigmoid(x):
return 1 / (1 + math.exp(-x))sigmoid
直接获取 LaTeX 表达式
如果不想使用装饰器,可以使用函数get_latex直接获取表达式
def sigmoid(x):
return 1 / (1 + math.exp(-x))latexify.get_latex(sigmoid)
'\\mathrm{sigmoid}(x) = \\frac{{1}}{{1} + \\exp{\\left({-x}\\right)}}'
if else
python 中的 if else 语句转换为数学符号。
在这里我们实现ReLU激活函数。
@latexify.function
def relu(x):
if x > 0:
return x
else:
return 0relu
使用数学符号
use_math_symbol你还可以通过将参数传递给装饰器来告诉 latexify 使用数学符号。
这里的设置use_signature=False类似于使用latexify.expression装饰器,隐藏函数签名,只显示表达式。
下面我们定义一个简单的线性回归方程。
@latexify.function(use_math_symbols=True, use_signature=False)
def linear_regression(x, w, beta):
return w * x + betalinear_regression
请注意,beta 会自动转换为希腊符号。
设置标识符
如果要替换函数、参数和变量名称,则需要创建一个字典,其中的键是原始名称,值是要替换的名称。
我们还将use_set_symbols参数设置为True,以便转换集合符号。
这里我们实现了Jaccard相似度。
identifiers = {
"jaccard_similarity": "J",
"a": "A",
"b": "B",
"len": "cardinality"
}@latexify.function(use_set_symbols=True, identifiers=identifiers)
def jaccard_similarity(a, b):
return len(a & b) / len(a | b)
jaccard_similarity
下面左图是设置标识符之前,右图是设置标识符之后。
编写所有变量
如果你的函数在返回语句之前定义变量,则可以使用参数reduce_assignments将它们组合在一起并返回单个表达式。
下面我们定义logit函数。
# logit function
@latexify.function(reduce_assignments=True)
def logit(p):
nominator = p
denominator = 1 - p
return math.log(nominator / denominator)logit
🏴☠️宝藏级🏴☠️ 原创公众号『数据STUDIO』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括可戳👉Python|MySQL|数据分析|数据可视化|机器学习与数据挖掘|爬虫 等,从入门到进阶!
长按👇关注- 数据STUDIO -设为星标,干货速递