gpt4 book ai didi

python - 使用 numexpr 创建可调用对象

转载 作者:行者123 更新时间:2023-11-28 17:36:38 25 4
gpt4 key购买 nike

我正在使用 sympy 进行一些符号数学运算,然后使用 eval 和 sympy 的 lambdastr 实用程序生成 Python lambda 函数。这是我的意思的一个简化示例:

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,而且 sympy 不一定会生成计算效率高的代码。相反,我想使用 numexpr,它似乎非常适合这个用例:

import numexpr
print numexpr.evaluate(str(expr), local_dict=dict(a=foo, b=bar))

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

最佳答案

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

Lambdify您自己的函数可能看起来像这样:

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

关于python - 使用 numexpr 创建可调用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29807087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com