python sympy中使用numpy高效计算

python sympy中使用numpy高效计算

  • 问题所在
  • 解决办法

问题所在

当使用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))

  1. https://docs.sympy.org/0.7.4/modules/numeric-computation.html ↩︎ ↩︎

你可能感兴趣的:(python)