gpt4 book ai didi

python - 从值数组评估 sympy 表达式

转载 作者:IT老高 更新时间:2023-10-28 21:51:52 26 4
gpt4 key购买 nike

我正在尝试 sympy,但遇到了一个我无法解决的问题。

使用 scipy,我可以编写一个表达式并为 x 值数组评估它,如下所示:

import scipy
xvals = scipy.arange(-100,100,0.1)
f = lambda x: x**2
f(xvals)

使用 sympy 我可以编写如下相同的表达式:

import sympy
x = sympy.symbols('x')
g = x**2

我可以通过执行以下操作来评估此表达式的单个值:

g.evalf(subs={x:10})

但是我不知道如何评估它的 x 值数组,就像我对 scipy 所做的那样。我该怎么做?

最佳答案

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

其次,如果您想对 many 值进行数值评估,SymPy 不是最佳选择(毕竟它是一个符号库)。使用 numpy 和 scipy。

但是,以数字方式评估某事物的一个正当理由是,推导出要评估的表达式很困难,因此您在 SymPy 中推导出它,然后在 NumPy/SciPy/C/Fortran 中对其进行评估。要将表达式转换为 numpy,只需使用

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 的文档字符串以获取更多详细信息。请注意,lambdify 仍然存在一些问题,可能需要重写。

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

编辑:可以在 wiki https://github.com/sympy/sympy/wiki/Philosophy-of-Numerics-and-Code-Generation-in-SymPy 上找到在 SymPy 中执行数字的方法的更新列表。

关于python - 从值数组评估 sympy 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10678843/

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