Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与数组组合的Sympy lambdify错误_Python_Python 2.7_Numpy_Sympy - Fatal编程技术网

Python 与数组组合的Sympy lambdify错误

Python 与数组组合的Sympy lambdify错误,python,python-2.7,numpy,sympy,Python,Python 2.7,Numpy,Sympy,我想用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)))

我想用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)
>>> sBeta(psi)
>>> ValueError: sequence too large; cannot be greater than 32
如果我这样尝试,会出现以下错误:

>>> sBeta(psi)
>>> AttributeError: 'Mul' object has no attribute 'exp'
>>> sBeta(*psi)
>>> TypeError: <lambda>() takes exactly 1 argument (79 given)
>>> sBeta(psi)
>>> ValueError: sequence too large; cannot be greater than 32
现在出现另一个错误:

>>> sBeta(psi)
>>> AttributeError: 'Mul' object has no attribute 'exp'
>>> sBeta(*psi)
>>> TypeError: <lambda>() takes exactly 1 argument (79 given)
>>> sBeta(psi)
>>> ValueError: sequence too large; cannot be greater than 32

我不完全确定您收到的所有错误消息;我发现的一件事是,它可能是由一种疾病引起的。在显式导入函数时,这可能不是问题所在。我认为这是因为您没有为
var\u 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])
array([2.71828182845905**(-var_tau), 2.71828182845905**(-2*var_tau),
   2.71828182845905**(-3*var_tau)], dtype=object)
In [1]: sym.diff(result[1], var_tau)
Out[1]: -2.0*2.71828182845905**(-2*var_tau)

如果有人面临同样的问题,我会给你一个解决方案: 根据@Cleb answer,我解决了以下问题:

    psi = np.array([1, 2, 3])

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

    sBeta = sym.lambdify((x, y), np.e**(-x*y), ["numpy", "sympy"])
    result = sBeta(var_tau, psi)
然后,
结果
如下所示:

array([ 0.36787944,  0.13533528,  0.04978707])
array([2.71828182845905**(-var_tau), 2.71828182845905**(-2*var_tau),
   2.71828182845905**(-3*var_tau)], dtype=object)
In [1]: sym.diff(result[1], var_tau)
Out[1]: -2.0*2.71828182845905**(-2*var_tau)
现在我可以像这样使用sym.diff函数:

array([ 0.36787944,  0.13533528,  0.04978707])
array([2.71828182845905**(-var_tau), 2.71828182845905**(-2*var_tau),
   2.71828182845905**(-3*var_tau)], dtype=object)
In [1]: sym.diff(result[1], var_tau)
Out[1]: -2.0*2.71828182845905**(-2*var_tau)

然而,如果我把var_tau当作一个变量来处理,它会工作得很好

谢谢你的帮助和全面的答复!np.e**不真实。你帮我省了很多时间。非常感谢。