当使用sympy时,如果将一个符号变量使用.subs方法替换为类型为np.array的变量时,将无法计算出数值结果。如下:
import sympy as sym
import numpy as np
x = sym.Symbol('x1')
y = sym.Symbol('y1')
z= sym.exp(x*y)
xm = np.array([1+1j,2,3])
ym = np.array([1,2,3])
print(z.subs({'x1':xm, 'y1':ym}))
并且根据官网文档1,subs方法效率极低。
根据官方文档给出的办法,可以使用sym.lambdify。
The lambdify function translates SymPy expressions into Python functions, leveraging a variety of numerical libraries.
同样参考1,就是将上边的代码改成如下:
import sympy as sym
import numpy as np
x = sym.Symbol('x1')
y = sym.Symbol('y1')
z= sym.exp(x*y)
xm = np.array([1+1j,2,3])
ym = np.array([1,2,3])
f=sym.lambdify(('x1','y1'), z, "numpy")
print(f(xm,ym))
https://docs.sympy.org/0.7.4/modules/numeric-computation.html ↩︎ ↩︎