我过去使用过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上正常工作.