首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组输入的Sympy Lambdify

数组输入的Sympy Lambdify
EN

Stack Overflow用户
提问于 2014-07-29 11:53:20
回答 1查看 3.9K关注 0票数 7

我试图为以下代码提供数组作为输入,并期望数组作为输出。

代码语言:javascript
复制
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()

但是得到以下错误。

代码语言:javascript
复制
TypeError: <lambda>() takes exactly 3 arguments (13 given)

我怎么才能说这是一个数组呢?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-29 12:17:29

1.解决方案:您的问题是,函数T需要一个值,但是您要分发一个列表。尝试以下方法而不是print T(data[0],[0.29,4.5])来获得一个结果列表:

代码语言:javascript
复制
print [T(val,[0.29,4.5]) for val in data[0]]

或者使用包装器函数:

代码语言:javascript
复制
def arrayT(array, params):
    return [T(val, params) for val in array]

print arrayT(data[0], [0.29, 4.5])

2.解决方案:你必须改变你的数学表达式。不知何故,结结巴巴地不适用于列表列表,所以请尝试如下:

代码语言:javascript
复制
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)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25014667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档