提问人:bwooster 提问时间:11/5/2023 最后编辑:bwooster 更新时间:11/6/2023 访问量:84
用于自动为函数创建数学公式的 Python 包 [已关闭]
Python package to automatically create mathematical formula for a function [closed]
问:
闭。这个问题正在寻求有关书籍、工具、软件库等的建议。它不符合 Stack Overflow 准则。它目前不接受答案。
我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。
16天前关闭。
我相信我学到了一个 Python 包,它可以自动将 Python 函数转换为数学符号。例如,当应用于
def power(a, b):
return a**b
包装将产生
功率 = ab
在 Jupyter Notebook 中,可能使用 LaTeX。
有谁知道那个包是什么?
编辑:我正在考虑一个单一用途的软件包。我知道 SymPy 并且没有想到这一点,但 @cards 的答案表明它可以工作。
答:
1赞
Andrey Rojas
11/5/2023
#1
你所指的包可能是 SymPy,它是一个用于符号数学的 Python 库。SymPy 可用于操作符号表达式和生成数学符号,包括 LaTeX 输出。
评论
0赞
bwooster
11/5/2023
感谢您的回复。我熟悉它,因为我实际上已经为它贡献了文档。SymPy 当然是一种创建方程式并在 LaTeX 中输出它们的方法,但这需要在 SymPy 中编写方程式,例如定义符号和方程式。我记得我学到的是一种仅基于现有 Python 代码生成格式化数学表达式的方法。我相信它将是围绕上面定义的函数的装饰器,并将在 Jupyter Notebook 中输出格式化的数学表达式。power
1赞
Robert Dodier
11/6/2023
@bwooster 您可以考虑将此说明附加到您的问题陈述中;它将帮助其他人知道您已经了解 Sympy,并且您正在寻找其他东西或更多东西。
2赞
cards
11/5/2023
#2
一个有同情心的解决方案。
思路:--sympy.parsing--> --sympy.printing.latexpython_func
Sympy.Expr
--> LaTeX_str
使用 inspect
获取函数的源代码。
这里有一个示例,试图跟踪帖子作者在评论中提供的信息。
参数只能以关键字形式传递!
from inspect import getsource
from sympy import parse_expr, latex
def python2latex(func):
# return a latex expression from a python function
def __wrapper(**kwargs):
# get expression in return
*_, src_return = getsource(func).rstrip().rpartition('\n')
*_, src_return = src_return.partition('return ')
# cast to sympy expression
expr = parse_expr(src_return, kwargs , evaluate=False)
# not mandatory - compute final result without sympy
result = func(**kwargs)
# build a possible LaTeX expression
template_result_TeX = "${} = {} = {}$"
# apply the template
return template_result_TeX.format(
latex(parse_expr(src_return)),
latex(expr),
result)
return __wrapper
@python2latex
def power(a, b):
return a**b
result = power(a=3, b=4) # arguments as keywords!!
print(result)
输出
$a^{b} = 3^{4} = 81$
评论
0赞
bwooster
11/6/2023
感谢您解决这个问题,@cards!令人印象深刻的是,可以从 Python 函数中提取多少。但我正在寻找一个参数化的方程,而不是一个替换值的方程,例如,我想要 $power = a^{b}$,而不是 $3^{4} = 81$
0赞
cards
11/6/2023
我不确定我是否理解你的意思,特别是是否应该改变如何调用函数(装饰器的方式是oo!:) 因此,请尝试以下编辑,它返回[当然您可以根据自己的意愿进行修改]result_TeX = f"${latex(parse_expr(src_return))} = {latex(expr)} = {result}$"
$a^{b} = 3^{4} = 81$
0赞
bwooster
11/6/2023
#3
Mastodon 上的某个人让我想起了我正在考虑的软件包:latexify。
latexify 是一个 Python 包,用于编译 Python 源代码的片段 代码到相应的 LaTeX 表达式
它可以从函数的所有行中提取数学运算。示例在 Google Colab 笔记本中。
评论
parse_expr
--> -- --> LaTeX:sympy
str
sympy.Exp
sympy.latex
str