python – 在lambdify’d sympy表达式上使用numba.autojit

我过去使用过numpy并且对它很熟悉,但有时当我想要一点额外的速度时,我已经能够使用numba.autojit装饰器了.简单.现在的问题是我正在研究一系列的症状表达式和numba(jit OR autojit)不确定lambdify的功能是什么.看来sympy没有维护特定的参数列表.

我想我可以看看sympy.lamdify是如何工作的,并制作我自己的版本,它包含了numba,但我想我先问一下.

解决方法:

为了回答你的第二个问题,lambdify的工作方式是它创建一个表达式的字符串形式作为lambda,并使用数字函数在名称空间中进行篡改.

例如,对于lambdify(x,sin(x),’numpy’),sin(x)被转换为’sin(x)'(这里的字符串形式与常规字符串形式相同,但它们可以不同,例如,因为SymPy和NumPy之间的函数名称不同.执行此操作的函数是sympy.printing.lambdarepr.lambdarepr.请注意,您要使用的函数是sympy.utilities.lambdify.lambdastr,它也执行下一步.

然后将其添加到lambda,给出’lambda x:sin(x)’.

然后,它粗略地做

g = {}
exec 'from numpy import *' in g # or exec('from numpy import *', g) in Python 3
l = eval('lambda x: sin(x)', g)

和l将是lambdifies函数.

换句话说,它在sin为numpy.sin的命名空间中计算’lambda x:sin(x)’.

据我所知,numba.jit和numba.autojit只​​是翻译字节码,因此它们应该在lambda上正常工作.

上一篇:python-Sympy不会简化自然平方数的平方根


下一篇:使用Sympy在Python中集成