Sympy:使用sympify将自定义函数减少为字符串?

时间:2019-10-23 11:31:27

标签: python sympy

是否有解决方案来对sympify()字符串进行自定义方法?

Sympy具有漂亮的功能sympify

  • 它可以将字符串简化为sympy-functions,并 简化所有表达式。很好!
  • 它允许添加“ sympify”功能作为类。

这是官方示例。

from sympy import Matrix, sympify

class MyList1(object):
    def __iter__(self):
        yield 1
        yield 2
        return
    def __getitem__(self, i): return list(self)[i]
    def _sympy_(self): return Matrix(self)


local_dict= {"MyList1": MyList1}
print(sympify(MyList1()))    # Matrix([[1], [2]])
print(sympify('MyList1()'))  # MyList1()
print(sympify('MyList1()', locals=local_dict))  # <__main__.MyList1 object at 0x0000000006D0AA20>

后两行不能通过sympify来简化-在字符串化时,我们的类显然是未知的。将课程放到“本地人”中对我不起作用。

是否有减少字符串的解决方案?


2 个答案:

答案 0 :(得分:1)

我认为它满足了您的要求... MyList1没有打印方法,但是数据在那里:

>>> list(sympify('MyList1()', locals=local_dict))
[1, 2]

答案 1 :(得分:1)

我认为这是SymPy中的错误。基本上,从字符串构造对象时,它不会调用_sympy_。您可以通过两次调用sympify()(如sympify(sympify('MyList1()', locals=local_dict)))来解决此问题。在正常操作下,sympify()应该是幂等的,因此这样做没有任何危害。