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 ↩︎ ↩︎

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值