5

私は sympy を使用して複数の式から用語を収集しており、(ipython-notebook 内で) 結果をフォーマットして、左端の列に用語があり、後続の各列が 1 つの式を表している表を作成したいと考えています。列のエントリは、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 と latex テーブルの既知の問題のようです。ここを参照してください:

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

2 つの異なる回避策があります。ユニコードを使用:

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
4

1 に答える 1

0

間違いなく、問題の一部は、取得したラテックスがdf.to_latex()実際には有効なラテックスではないことです. たとえば、その関数の出力を取り出して専用の latex ドキュメントに貼り付けるだけでは、コンパイルされません。

特に、表のエントリの一部には のようなものが含まれていますが\Delta、これらは数学環境外です (ドル記号はありません)。

だから、それは間違いなく問題です。別の考えられる問題は、などの使用です。これらは非標準のラテックス構造です (ただし、適切なラテックス パッケージで使用できます) が、それらの が関数によって認識される\topruleかどうかはわかりません。ruleLatex

tabularとはいえ、最も単純な環境を適切に表示することさえできません。たとえば、私がそうしても

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

あなたが言うように、ボックス化された結果が得られます。(ただし、その文字列の内容は、専用のラテックス ドキュメントで適切にコンパイルされます。)

于 2013-09-09T04:46:16.420 に答える