gpt4 book ai didi

python - sympy lambdify 与 numexpr 和 sqrt

转载 作者:行者123 更新时间:2023-12-05 08:10:00 24 4
gpt4 key购买 nike

我正在尝试使用 numexpr 加速 lambdify 生成的一些数字代码。不幸的是,基于numexpr 的函数在使用sqrt 函数时会中断,即使它是supported functions 之一。 .

这对我来说重现了这个问题:

import sympy
import numpy as np
import numexpr

from sympy.utilities.lambdify import lambdify

expr = sympy.S('b*sqrt(a) - a**2')
a, b = sorted(expr.free_symbols, key=lambda s: s.name)

func_numpy = lambdify((a,b), expr, modules=[np], dummify=False)
func_numexpr = lambdify((a,b), expr, modules=[numexpr], dummify=False)

foo, bar = np.random.random((2, 4))

print sympy.__version__
print func_numpy(foo, bar)
print func_numexpr(foo, bar)

当我运行它时,输出是:

0.7.6
[-0.02062061 0.08648306 -0.57868128 0.27598245]
Traceback (most recent call last):
File "sympy_test.py", line 17, in <module>
print func_numexpr(foo, bar)
File "<string>", line 1, in <lambda>
NameError: global name 'sqrt' is not defined

作为完整性检查,我还尝试直接调用 numexpr:

numexpr.evaluate('b*sqrt(a) - a**2', local_dict=dict(a=foo, b=bar))

按预期工作,产生与 func_numpy 相同的结果。


编辑:当我使用这条线时它有效:

func_numexpr = lambdify((a,b), expr, modules=['numexpr'], dummify=False)

这是一个 sympy 错误吗?

最佳答案

您可以将 np.sqrt(9) 更改为 numexpr.evaluate('9**0.5')

关于python - sympy lambdify 与 numexpr 和 sqrt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29807509/

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