我正在解决的数学问题在不同的场景中提供了不同的分析解决方案,我想在一个很好的表格中总结结果。 IPython Notebook很好地呈现了这个列表: 例如:
import sympy
from pandas import DataFrame
from sympy import *
init_printing()
a, b, c, d = symbols('a b c d')
t = [[a/b, b/a], [c/d, d/c]]
t
但是,当我使用DataFrame将答案汇总到表格中时,无法再渲染数学:
df = DataFrame(t, index=['Situation 1', 'Situation 2'], columns=['Answer1','Answer2'])
df
“print df.to_latex()”也给出了相同的结果。我也尝试过“print(latex(t))”,但是在LaTex中编译完成后就可以了,这很好,但是我仍然需要手动将它转换成表格:
我应该如何正确使用DataFrame才能正确渲染数学?或者有没有其他方法将数学结果导出到Latex中的表中?谢谢!
更新:2014年1月25日 再次感谢@Jakob解决问题。它适用于简单矩阵,但对于更复杂的数学表达式仍然存在一些小问题。但我想@asmeurer说,完美需要IPython和Pandas的更新。
更新:2014年1月26日 如果我直接渲染结果,即只打印列表,它可以正常工作:
答案 0 :(得分:5)
MathJax目前无法呈现表格,因此最明显的方法(纯乳胶)不起作用。
但是,按照@asmeurer的建议,您应该使用html表并将单元格内容渲染为latex。在您的情况下,可以通过以下中间步骤轻松实现:
from sympy import latex
tl = map(lambda tc: '$'+latex(tc)+'$',t)
df = DataFrame(tl, index=['Situation 1', 'Situation 2'], columns=['Answer'])
df
给出:
<强>更新强>
如果是二维数据,简单的地图功能将无法直接使用。为了应对这种情况,可以使用numpy shape , reshape 和 ravel 函数,如:
import numpy as np
t = [[a/b, b/a],[a*a,b*b]]
tl=np.reshape(map(lambda tc: '$'+latex(tc)+'$',np.ravel(t)),np.shape(t))
df = DataFrame(tl, index=['Situation 1', 'Situation 2'], columns=['Answer 1','Answer 2'])
df
这给出了:
更新2:
如果字符串长度超过一定数量,Pandas会产生细胞含量。例如,一个更复杂的表达,如
t1 = [a/2+b/2+c/2+d/2]
tl=np.reshape(map(lambda tc: '$'+latex(tc)+'$',np.ravel(t1)),np.shape(t1))
df = DataFrame(tl, index=['Situation 1'], columns=['Answer 1'])
df
给出:
要解决此问题,必须更改pandas包选项,有关详细信息,请参阅here。对于目前的情况,必须更改max_colwidth
。默认值为50,因此我们将其更改为100:
import pandas as pd
pd.options.display.max_colwidth=100
df
给出: