gpt4 book ai didi

python - Sympy:lambda 化使得对数组的操作总是产生数组,对于常量也是如此?

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

我需要在许多点上评估用户给出的函数(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]))

我得到:

1
[1, 2, 3]

第二个是好的,但我预计第一个将是一个列表。

这些函数位于矩阵中,是 sympy 运算(例如求导)的最终结果。 f1 和 f2 的确切形式因问题而异。

最佳答案

lamb1 是一个返回常量 1 的函数:deflambda1(x): return 1

lamb2 是一个返回其参数的函数:deflambda2(x): return x

因此,输出非常符合预期。

这是一种可能有效的方法。我将 f2 的测试函数更改为 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]))

输出:

1
[1 1 1]
4
[1 4 9]

关于python - Sympy:lambda 化使得对数组的操作总是产生数组,对于常量也是如此?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59757573/

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