Subs sympy free vars with a string
Subs sympy free vars with a string
我正在将自定义格式(如“{a} + {b}”)解析为 sympy 表达式。我成功地工作了。现在,有没有办法将该 sympy 表达式转换回原始字符串,假设我有一个映射自由变量名称和相应的大括号字符串表示的字典?
假设上面的自由变量是“a”和“b”,我想做类似的事情
str(expr.subs({'a': '{a}', 'b': '{b}'}))
但是 sympy 似乎不允许替换成这样的任意字符串。
您可以子类化 codegenerator (e.g. StrPrinter
), and overwrite the function that outputs the free variables. You can copy the original function from the sympy source 并进行一些修改。
这是一个例子:
import sympy as sp
from sympy.printing import StrPrinter
class CustomStrPrinter(StrPrinter):
def _print_Symbol(self, expr):
return f'{{{expr.name}}}'
a, b = sp.symbols('a b')
expr = a + b
custom_strPrinter = CustomStrPrinter().doprint
print(custom_strPrinter(expr)) # {a} + {b}
我正在将自定义格式(如“{a} + {b}”)解析为 sympy 表达式。我成功地工作了。现在,有没有办法将该 sympy 表达式转换回原始字符串,假设我有一个映射自由变量名称和相应的大括号字符串表示的字典?
假设上面的自由变量是“a”和“b”,我想做类似的事情
str(expr.subs({'a': '{a}', 'b': '{b}'}))
但是 sympy 似乎不允许替换成这样的任意字符串。
您可以子类化 codegenerator (e.g. StrPrinter
), and overwrite the function that outputs the free variables. You can copy the original function from the sympy source 并进行一些修改。
这是一个例子:
import sympy as sp
from sympy.printing import StrPrinter
class CustomStrPrinter(StrPrinter):
def _print_Symbol(self, expr):
return f'{{{expr.name}}}'
a, b = sp.symbols('a b')
expr = a + b
custom_strPrinter = CustomStrPrinter().doprint
print(custom_strPrinter(expr)) # {a} + {b}