gpt4 book ai didi

python - 如何在 ipython-notebook 中获取 sympy 表达式的 latex 表?

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:23 25 4
gpt4 key购买 nike

我正在使用 sympy 从多个表达式中收集术语,并希望将结果(在 ipython-notebook 中)格式化为表格,其中术语在最左边的列下方,随后的每个列代表一个表达式。列中的条目来自 sympy.collect(syms, evaluate=False)

返回的 dict

到目前为止我有:

from IPython.display import display, Latex
import pandas as pd
import sympy as sym
sym.init_printing()
x,y,z = sym.symbols('x,y,z')
da,db,dc = sym.symbols('{\Delta}a {\Delta}b {\Delta}c ' )

e_list = []
d_list = []
e_list.append(da*2*x + da*(y - 2) + db*3*z + dc*(x+y))
e_list.append(dc*z + dc*x + da*x + db*(z+2))
for e in e_list:
display(e.expand().collect((x,y,z)))
d_list.append(e.expand().collect((x,y,z),evaluate=False))

df = pd.DataFrame(d_list).T

除了条目是原始 latex 之外,数据框显示如我所愿。

我认为以下方法可行:

Latex(df.to_latex())

但我得到的只是被盒子包围的 latex 代码。

编辑:这似乎是 ipython 和 latex 表的一个已知问题,请参见此处:

http://grokbase.com/t/scipy.org/ipython-user/12acr5rrr1/may-be-old-topic-just-getting-started-with-ipython-notebook-trouble-with-tables

我有两种不同的解决方法。使用 unicode:

sym.init_printing(use_latex=False)
...
da,db,dc = sym.symbols('∆a ∆b ∆c' )

或者将表格显示为一个 sympy 矩阵:

terms = [x,y,z]
d_list = [(e.expand().collect((terms),evaluate=False)) for e in e_list]
mterms = sym.zeros(M.shape[0],len(terms)+1)
key1 = d_list[0].keys()[0]
terms.insert(0,key1)
for i in range(mterms.shape[0]):
for j in range(mterms.shape[1]):
try:
mterms[i,j] = d_list[i][terms[j]]
except:
mterms[i,j] = 0

mterms

最佳答案

毫无疑问,部分问题是您从 df.to_latex() 中得到的 latex 实际上不是有效的 latex 。例如,如果您只是获取该函数的输出并将其粘贴到专用的 latex 文档中,它将无法编译。

特别是,表中的某些条目包含诸如 \Delta 之类的内容,但这些内容不在数学环境中(没有美元符号)。

所以这绝对是个问题。另一个可能的问题是 \toprule 等的使用。这些是非标准的 latex 结构(尽管它们可以与正确的 latex 包一起使用),但我不知道那些 Latex 函数识别规则

综上所述,我什至无法正确显示最简单的 tabular 环境。例如,即使我这样做

Latex(r"""\begin{tabular}{l} 1 \\ 2 \end{tabular}""")

正如您所说,我得到了一个盒装结果。 (尽管该字符串的内容在专门的 latex 文档中可以正确编译。)

关于python - 如何在 ipython-notebook 中获取 sympy 表达式的 latex 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18503351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com