Tit*_*nic 10 latex sympy ipython pandas ipython-notebook
我正在解决的数学问题在不同的场景中提供了不同的分析解决方案,我想在一个很好的表格中总结结果.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
Run Code Online (Sandbox Code Playgroud)

但是,当我使用DataFrame将答案汇总到表中时,无法再渲染数学:
df = DataFrame(t, index=['Situation 1', 'Situation 2'], columns=['Answer1','Answer2'])
df
Run Code Online (Sandbox Code Playgroud)

"print df.to_latex()"也给出了相同的结果.我也尝试过"print(latex(t))",但是在LaTex中编译完成后就可以了,这很好,但是我还是需要手动将它转换成表格:

我应该如何正确使用DataFrame才能正确渲染数学?或者有没有其他方法将数学结果导出到Latex中的表中?谢谢!
更新:01/25/14再次感谢@Jakob解决问题.它适用于简单矩阵,但对于更复杂的数学表达式仍然存在一些小问题.但我想@asmeurer说,完美需要IPython和Pandas的更新.

更新:01/26/14如果我直接渲染结果,即只打印列表,它工作正常:

MathJax目前无法呈现表格,因此最明显的方法(纯乳胶)不起作用.
但是,遵循@asmeurer的建议,您应该使用html表并将单元格内容渲染为乳胶.在您的情况下,可以通过以下中间步骤轻松实现:
from sympy import latex
tl = map(lambda tc: '$'+latex(tc)+'$',t)
df = DataFrame(tl, index=['Situation 1', 'Situation 2'], columns=['Answer'])
df
Run Code Online (Sandbox Code Playgroud)
这使:

更新:
在二维数据的情况下,简单的地图功能将不能直接工作.为了应对这种情况,可以使用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
Run Code Online (Sandbox Code Playgroud)
这给出了:

更新2:
如果字符串长度超过一定数量,大熊猫会收获细胞含量.比如像一个更复杂的表达
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
Run Code Online (Sandbox Code Playgroud)
得到:

为了解决这个问题,必须更改pandas包选项,详情请参见此处.对于目前的情况max_colwidth,必须改变.默认值为50,因此我们将其更改为100:
import pandas as pd
pd.options.display.max_colwidth=100
df
Run Code Online (Sandbox Code Playgroud)
得到:

| 归档时间: |
|
| 查看次数: |
5421 次 |
| 最近记录: |