我想使用sympy对数组输入进行分级。这是我第一次尝试:Sympy lambdify与数组结合错误
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
谢谢你的帮助和全面的答复! – petermailpan