Abe*_*rez 5 python numpy sympy
我需要在许多点上评估用户给出的函数(f')的导数。这些点位于列表中(或 numpy.array、pandas.Series...)。当 f' 取决于 sympy 变量时,我获得了预期值,但当 f' 是常量时,我获得了预期值:
import sympy as sp
f1 = sp.sympify('1')
f2 = sp.sympify('t')
lamb1 = sp.lambdify('t',f1)
lamb2 = sp.lambdify('t',f2)
print(lamb1([1,2,3]))
print(lamb2([1,2,3]))
Run Code Online (Sandbox Code Playgroud)
我得到:
1
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
第二个是好的,但我预计第一个将是一个列表。
这些函数位于矩阵中,是 sympy 运算(例如求导)的最终结果。f1 和 f2 的确切形式因问题而异。
lamb1是一个返回常量 1: 的函数 def lamb1(x): return 1。
lamb2是一个返回其参数的函数: def lamb2(x): return x。
因此,输出非常符合预期。
这是一种可能有效的方法。我将测试函数更改为f2to t*t,因为这在我的测试中更烦人(处理 Pow(t,2))。
import sympy as sp
import numpy as np
f1 = sp.sympify('1')
f2 = sp.sympify('t*t')
def np_lambdify(varname, func):
lamb = sp.lambdify(varname, func, modules=['numpy'])
if func.is_constant():
return lambda t: np.full_like(t, lamb(t))
else:
return lambda t: lamb(np.array(t))
lamb1 = np_lambdify('t', f1)
lamb2 = np_lambdify('t', f2)
print(lamb1(1))
print(lamb1([1, 2, 3]))
print(lamb2(2))
print(lamb2([1, 2, 3]))
Run Code Online (Sandbox Code Playgroud)
输出:
1
[1 1 1]
4
[1 4 9]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1323 次 |
| 最近记录: |