数据STUDIO

用 Python 编写 LaTeX

Image

Image
Image

写 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 0

relu

Image

使用数学符号

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 + beta

linear_regression

Image

请注意,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

下面左图是设置标识符之前,右图是设置标识符之后。

Image
Image

编写所有变量

如果你的函数在返回语句之前定义变量,则可以使用参数reduce_assignments将它们组合在一起并返回单个表达式。

下面我们定义logit函数。

# logit function
@latexify.function(reduce_assignments=True)
def logit(p):
    nominator = p
    denominator = 1 - p
    return math.log(nominator / denominator)

logit

Image
🏴‍☠️宝藏级🏴‍☠️ 原创公众号『数据STUDIO』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括可戳👉Python|MySQL|数据分析|数据可视化|机器学习与数据挖掘|爬虫 等,从入门到进阶!

长按👇关注- 数据STUDIO -设为星标,干货速递ImageImage