首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用numexpr创建可调用的

使用numexpr创建可调用的
EN

Stack Overflow用户
提问于 2015-04-22 19:28:22
回答 1查看 808关注 0票数 3

我正在用渐近进行一些符号运算,然后使用eval和渐近的lambdastr实用程序生成Python函数。下面是一个简单的例子,说明我的意思:

代码语言:javascript
复制
import sympy
import numpy as np
from sympy.utilities.lambdify import lambdastr

# simple example expression (my use-case is more complex)
expr = sympy.S('b*sqrt(a) - a**2')
a, b = sorted(expr.free_symbols, key=lambda s: s.name)

func = eval(lambdastr((a,b), expr), dict(sqrt=np.sqrt))

# call func on some numpy arrays
foo, bar = np.random.random((2, 4))
print func(foo, bar)

这是可行的,但我不喜欢使用eval,而且渐近并不一定会生成计算效率高的代码。相反,我想使用numexpr,它似乎非常适合这个用例:

代码语言:javascript
复制
import numexpr
print numexpr.evaluate(str(expr), local_dict=dict(a=foo, b=bar))

唯一的问题是,我希望生成一个可调用的(比如func lambda),而不是每次调用numexpr.evaluate。这个是可能的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-22 20:04:40

您可以使用lambdify模块,它允许您将SymPy表达式转换为lambda函数,以便进行高效的计算。这对于返回带有附加实现的函数的能力是很好的。

使用您自己的函数的Lambdify可能如下所示:

代码语言:javascript
复制
func = lambdify((a,b),expr, dict(sqrt=np.sqrt))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29807087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档