gpt4 book ai didi

python - Sympylambdafify与数组结合时出现错误

转载 作者:行者123 更新时间:2023-12-01 03:07:44 25 4
gpt4 key购买 nike

我想用 sympy 对数组输入进行 lamdify。这是我的第一次尝试:

import sympy as sym
import numpy as np

# Load Data
data = np.loadtxt( "D:\data.r2023.c87.dat", skiprows=1)

# Access to columns
vza = data [:,2]
sza = data [:,4]

# var_psi is the array input
psi = (1/(np.cos(sza))) + (1/(np.cos(vza)))
var_tau, var_omega, var_psi = sym.symbols('var_tau var_omega var_psi', real = True)

sBetaFunc = sym.exp(-var_tau * var_psi)
sBeta = sym.lambdify(var_psi, sBetaFunc, modules=[“numpy”, "sympy"])

如果我现在尝试调用该函数,则会出现以下错误:

>>> sBeta(psi)
>>> AttributeError: 'Mul' object has no attribute 'exp'

如果我尝试这样做,则会出现以下错误:

>>> sBeta(*psi)
>>> TypeError: <lambda>() takes exactly 1 argument (79 given)

我读了很多关于这个问题的文章。然而,似乎没有什么适合我的问题或我的情况。

我在 sympy 函数中需要这个,因为我想使用 sympy 中的 diff 函数来区分一些非常复杂的函数。

提前谢谢您。

编辑:

现在我尝试了这个:

import sympy as sym
import numpy as np
from sympy.abc import w, x, y, z

sBetaFunc = sym.exp(-var_tau * x)
sBeta = sym.lambdify(x, sBetaFunc, modules=["sympy"])

现在出现不同的错误:

>>> sBeta(psi)
>>> ValueError: sequence too large; cannot be greater than 32

最佳答案

我不完全确定您收到的所有错误消息;我发现的一件事是它可能是由 clash in name space 引起的。当您显式导入函数时,这可能不是这里的问题。我认为这是由于您没有为 var_tau 提供值造成的。

以下应该完成您尝试完成的任务:

import sympy as sym
import numpy as np

var_tau, var_omega, var_psi = sym.symbols('var_tau var_omega var_psi', real=True)

sBetaFunc = sym.exp(-var_tau * var_psi)

# also take your tau into account
sBeta = sym.lambdify((var_tau, var_psi), sBetaFunc, modules=np)

# your data; replace with actual values
psi = np.array([1, 2, 3])

# your value for tau
my_tau = 1.

# evaluate your function
result = sBeta(my_tau, psi)

然后结果看起来像这样:

array([ 0.36787944,  0.13533528,  0.04978707])

关于python - Sympylambdafify与数组结合时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43181028/

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