我想用sympy来表示数组输入 . 这是我的第一次尝试:
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
2 回答
我不完全确定您收到的所有错误消息;我发现的一件事是它可能是由clash in name space造成的 . 在明确导入函数时,这可能不是问题所在 . 我认为这是因为您没有为
var_tau
提供值 .以下应该做你想要完成的事情:
然后
result
看起来像这样:如果有人遇到同样的问题我会为你找到解决方案:根据@Cleb的回答,我解决了这个问题:
然后
result
看起来像这样:现在我可以像这样使用sym.diff函数:
但是,如果我像变量一样处理var_tau,它的效果非常好 .