我试图给出一个数组作为输入,并期望一个数组作为以下代码的输出.
from sympy import symbols
from sympy.utilities.lambdify import lambdify
import os
from sympy import *
import numpy as np
text=open('expr.txt','r')
expr=text.read()
x,param1,param2=symbols('x param1 param2')
params=np.array([param1,param2])
T=lambdify((x,params),expr,modules='numpy')
data=np.genfromtxt('datafile.csv',delimiter=',')
print T(data[0],[0.29,4.5])
text.close()
Run Code Online (Sandbox Code Playgroud)
但是得到以下错误.
TypeError: <lambda>() takes exactly 3 arguments (13 given)
Run Code Online (Sandbox Code Playgroud)
我如何告诉同意它的单个阵列?提前致谢.
1.解决方案:
您的问题是,函数T需要一个值,但您要分发一个列表.试试这个,而不是print T(data[0],[0.29,4.5])得到一个结果列表:
print [T(val,[0.29,4.5]) for val in data[0]]
Run Code Online (Sandbox Code Playgroud)
或者使用包装函数:
def arrayT(array, params):
return [T(val, params) for val in array]
print arrayT(data[0], [0.29, 4.5])
Run Code Online (Sandbox Code Playgroud)
2.解决方案:你必须改变你的数学表达式.不知何故,sympy不适用于列表列表,所以试试这个:
expr = "2*y/z*(x**(z-1)-x**(-1-z/2))"
T=lambdify((x,y,z),expr,'numpy')
print T(data[0], 0.29, 4.5)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2484 次 |
| 最近记录: |