【发布时间】:2013-09-01 10:31:38
【问题描述】:
我正在使用 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(df.to_latex())
但我得到的只是被一个盒子包围的乳胶代码。
编辑: 这似乎是 ipython 和 Latex 表的一个已知问题,请参见此处:
我有两种不同的解决方法。 使用 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
【问题讨论】:
-
我可能是错的,但我可能认为这是 pandas 或 IPython 中的错误(以最终负责的为准)。我希望数据框中的项目具有注册的自定义显示以使用该方法显示。
-
我已经找了几个小时了。我找不到将乳胶放在 IPython 中的表格的方法。 :(
标签: python latex pandas ipython-notebook sympy