首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从值数组计算渐近表达式

从值数组计算渐近表达式
EN

Stack Overflow用户
提问于 2012-05-21 10:17:47
回答 4查看 19K关注 0票数 37

我正在尝试渐变,我偶然发现了一个我无法解决的问题。

使用scipy,我可以编写一个表达式,并对x值数组进行计算,如下所示:

代码语言:javascript
复制
import scipy
xvals = scipy.arange(-100,100,0.1)
f = lambda x: x**2
f(xvals)

使用渐近,我可以编写相同的表达式,如下所示:

代码语言:javascript
复制
import sympy
x = sympy.symbols('x')
g = x**2

我可以通过执行以下操作来计算该表达式的单个值:

代码语言:javascript
复制
g.evalf(subs={x:10})

然而,我不知道如何计算x值数组的值,就像我对scipy所做的那样。我该怎么做呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-21 18:55:21

首先,目前SymPy不能保证支持numpy数组,而这正是您在本例中想要的。检查此错误报告http://code.google.com/p/sympy/issues/detail?id=537

其次,如果你想用数值计算很多值,SymPy不是最好的选择(毕竟它是一个符号库)。使用numpy和scipy。

然而,对某事物进行数值计算的一个有效理由是,很难推导出要计算的表达式,因此您可以在SymPy中导出它,然后在NumPy/SciPy/C/Fortran中对其进行计算。要将表达式转换为numpy,只需使用

代码语言:javascript
复制
from sympy.utilities.lambdify import lambdify
func = lambdify(x, big_expression_containing_x,'numpy') # returns a numpy-ready function
numpy_array_of_results = func(numpy_array_of_arguments)

有关更多详细信息,请查看lambdify的docstring。请注意,lambdify仍然存在一些问题,可能需要重写。

顺便说一句,如果你想多次计算表达式真正的,你可以使用sympy中的codegen/autowrap模块来创建包装好并可从python调用的fortran或C代码。

编辑:可以在维基https://github.com/sympy/sympy/wiki/Philosophy-of-Numerics-and-Code-Generation-in-SymPy上找到在SymPy中进行数字运算的更新列表

票数 45
EN

Stack Overflow用户

发布于 2013-04-10 15:43:52

虽然the accepted answer清楚地表明OP正在寻找数值计算,但我仍然要指出,通过使用symarray,也可以进行符号计算

代码语言:javascript
复制
import sympy
xs = sympy.symarray('x', 10)
f = lambda x: x**2
f(xs)

收益率

代码语言:javascript
复制
array([x_0**2, x_1**2, x_2**2, x_3**2, x_4**2, x_5**2, x_6**2, x_7**2,
       x_8**2, x_9**2], dtype=object)

请注意,这也在内部使用了一个numpy数组,但其中填充了sympy.Expr会话。

票数 8
EN

Stack Overflow用户

发布于 2019-09-10 23:13:58

或者你可以通过numpy.vectorize来完成。我在问题正文中使用了xgxvals

代码语言:javascript
复制
scalar_func = lambda xx: float(g.evalf(subs={x: xx}))
vector_func = numpy.vectorize(scalar_func)
vector_func(xvals) # returns a numpy array [10000.0, 9980.01, 9960.04, ...]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10678843

复制
相关文章

相似问题

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