繁体   English   中英

如何在ipython-notebook中获得一个表达同情表的乳胶表?

[英]How to get a latex table of sympy expressions in ipython-notebook?

我正在使用sympy从几个表达式中收集术语,并希望在一个表格中格式化结果(在ipython-notebook中),其中最左边的列为术语,每个后续列表示一个表达式。 在列中的条目是从dict通过返回sympy.collect(syms, evaluate=False)

到目前为止,我有:

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(df.to_latex())

但我得到的只是一个盒子包围的乳胶代码。

编辑:这似乎是ipython和乳胶表的一个已知问题,请看这里:

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' )

或者将表格显示为同情矩阵:

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()获得的乳胶实际上并不是有效的乳胶。 例如,如果您只是获取该函数的输出并将其粘贴到专用的乳胶文档中,则无法编译。

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

所以这绝对是个问题。 另一个可能的问题是使用\\toprule等。这些是非标准的乳胶结构(尽管它们可以与正确的乳胶包一起使用),但我不知道这些rule是否被Latex功能识别。

所有这些说,我甚至无法获得最简单的tabular环境来正确显示。 例如,即使我这样做

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

就像你说的那样,我得到一个盒装结果。 (虽然该字符串的内容可以在专用的乳胶文档中正确编译。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM