Ipython notebook 如何在IPython笔记本中打印名称为sympy的变量?
考虑在IPython(Jupyter)笔记本中使用Symphy定义的两个变量:Ipython notebook 如何在IPython笔记本中打印名称为sympy的变量?,ipython-notebook,jupyter-notebook,sympy,Ipython Notebook,Jupyter Notebook,Sympy,考虑在IPython(Jupyter)笔记本中使用Symphy定义的两个变量: R_g =Symbol(r'R_{g}') L_g =Symbol(r'L_{g}') 假设我做了一些数学运算,然后得到了一个复杂的表达式,其特征可以通过下面的简单示例来说明: a=R_g*L_g print a 这张照片是: L_{g}*R_{g} 我要打印出来 R_g*L_g 而不是 $R_g L_g$ 原因是我想将这个表达式复制粘贴到fortran代码中。这是一个挑战,因为我正在使用
R_g =Symbol(r'R_{g}')
L_g =Symbol(r'L_{g}')
假设我做了一些数学运算,然后得到了一个复杂的表达式,其特征可以通过下面的简单示例来说明:
a=R_g*L_g
print a
这张照片是:
L_{g}*R_{g}
我要打印出来
R_g*L_g
而不是
$R_g L_g$
原因是我想将这个表达式复制粘贴到fortran代码中。这是一个挑战,因为我正在使用Latex格式化变量。所以我必须格式化包含变量的术语,比如
IL_np1 =Symbol(r'I_{L}^{n+1}')
只需恰当地命名符号:
R_g = Symbol(r'R_g')
L_g = Symbol(r'L_g')
a = R_g * L_g
print(a)
输出:
R_g*L_g
或手动清理:
>>> s = Symbol(r'I_{L}^{n+1}')
>>> s
I_{L}^{n+1}
def make_clean_name(symbol, toremove='{}', replace=None):
replace = {'^': '**'} if replace is None else {}
return ''.join(replace.get(x, x) for x in symbol.name if x not in toremove)
>>> make_clean_name(s)
'I_L**n+1'
您可以使用一个自定义符号子类,该子类以一种方式使用
latex()
打印,另一种方式使用fcode()
打印
它就像
In [114]: latex(CustomSymbol('x_2', 'x_{2}'))
Out[114]: 'x_{2}'
In [115]: fcode(CustomSymbol('x_2', 'x_{2}'))
Out[115]: ' x_2'
我已将默认名称设置为fcode名称。如果您希望使用另一种方式,可以定义
\u fcode
而不是\u latex
我正在尝试使用Latex display来格式化术语,所以我有了类似于IL_np1=Symbol(r'I_{L}^{n+1}')
的变量,这看起来很有趣。我们将努力获得令人鼓舞的初步结果。您或任何人能解释一下这是如何工作的吗?@wander95 Symphy中的每台打印机都允许您通过定义一种特殊方法来定义其在自定义Symphy对象上的行为。在这种情况下,LaTeX和Fortran打印机的方法分别是\u LaTeX
和\u fcode
。有关更多详细信息,请参阅。
In [114]: latex(CustomSymbol('x_2', 'x_{2}'))
Out[114]: 'x_{2}'
In [115]: fcode(CustomSymbol('x_2', 'x_{2}'))
Out[115]: ' x_2'