SymPy lambdify引发OverflowError:数学范围错误

毛里西奥

所以,我有这段代码

from __future__ import division, print_function
import sympy as sp
import numpy as np
from sympy.utilities.lambdify import *

u = np.random.uniform(4, 6, 500)
w, k = sp.symbols('w k')
f = sp.log((k - w) * sp.exp((k - w)**5))
l = sum(f.subs(dict(k=k)) for k in u)

现在我想l用作的函数w所以我知道一些选择

z_lambdify = lambdify(w, l)
z_subs = lambda x: l.subs(w, x)

第一个函数给出一个错误

>>> z_lambdify(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <lambda>
OverflowError: math range error
>>> z_lambdify(4)
40.862695278600114

而第二个给出答案

>>> z_subs(1)
11469.9130597554
>>> z_subs(4)
40.8626952786003

我只会使用它,但是它非常慢。有什么方法可以解决此问题(修复lamdify错误或将其l用作不太慢的函数)?

版本:Python 2.7.6,NumPy 1.8.1,SymPy 0.7.4.1

索洛GP卡斯特罗

回答您的问题:

问题是:

z_lambdify = lambdify(w, l)

告诉新函数使用内置函数执行计算math,您可以使用来检查运行情况cProfile.run('z_lambdify(1)')同时执行z_subs(1)通话sympy功能。要获得相同的行为,您应该告诉lambdify()您使用相同的模块:

 z_lambdify = lambdify(w, l, "sympy")

重要建议:

您应该已经在定义函数时简化了它,然后使用它NumPy来更有效地执行计算。使用一些简单的代数,您的函数可以以“非溢出”格式重写为:

f = lambda k, w: np.log(k - w) + (k - w)**5

这样您就可以通过以下方式获得所需的答案:

f(k=u, w=1).sum()

当您f(k=u, w=1)得到具有相同形状的数组时u,其中每个值代表使用的每个值求值的函数的结果u可以使用此函数来同时评估f()为不同的值kw,即,使w作为另一阵列的相同的形状u,而不是使用恒定值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SymPy用dot()lambdify

来自分类Dev

Sympy Lambdify与数组输入

来自分类Dev

SymPy:区间数学

来自分类Dev

Sympy用numexpr lambdify ImmutableDenseMatrix

来自分类Dev

Python OverflowError:数学范围错误

来自分类Dev

Python OverflowError:数学范围错误

来自分类Dev

sympy任意函数范围

来自分类Dev

分段函数和numpy模块的sympy.lambdify错误

来自分类Dev

非常基本的SymPy错误

来自分类Dev

sympy集成的错误结果

来自分类Dev

设置sympy lambdify参数的默认值

来自分类Dev

在numpy mesgrid上评估sympy lambdify的结果

来自分类Dev

sympy lambdify与元组中的函数参数?

来自分类Dev

OverFlowError:数学范围错误javaScript到python

来自分类Dev

SymPy 1.0中的集成错误

来自分类Dev

sympy.subs-错误的替换

来自分类Dev

使用Sympy的导数错误

来自分类Dev

如何在SymPy中定义数学函数?

来自分类Dev

Spyder SymPy不打印符号数学

来自分类Dev

Sympy-更改图的y轴范围

来自分类Dev

sympy lambdify:如何提供更多功能(NCDF,NPDF等)

来自分类Dev

Python:SymPy lambdify Abs与NumPy一起使用

来自分类Dev

如何使Sympy lambdify(ed)函数接受数组输入?

来自分类Dev

Sympy-Lambdify-挖掘名称到虚拟变量

来自分类Dev

SymPy:使用2-D输入进行lambdify

来自分类Dev

在Sympy中隐式linsolve()然后进行lambdify

来自分类Dev

sympy lambdify:如何提供更多功能(NCDF,NPDF等)

来自分类Dev

sympy:Lambdify 不转换 sqrt 表达式

来自分类Dev

获取OverflowError:数学范围错误(试图计算数字的幂)