Sympy:具有大数组输入的Lambdify函数

时间:2017-07-20 16:38:58

标签: arrays sympy lambdify

我有一个问题lambdifing一个需要大数组的函数。复制相同问题的简化代码是:

from sympy import *
def fun(x):
    f = []
    for i,x_i in enumerate(x):
        f.append(x_i**i)
    return Matrix(f)
N = 256
x = Matrix([symbols("x_%s"%i) for i in range(N)])
fun_lam = lambdify((x,),fun(x))

会出现以下错误:

Traceback (most recent call last):
  File "bin/problem-lambdify.py", line 13, in <module>
    fun_lam = lambdify((x,),fun(x))
  File ".../env/lib/python3.4/site-packages/sympy-1.1rc1-py3.4.egg/sympy/utilities/lambdify.py", line 434, in lambdify
    func = eval(lstr, namespace)
  File "<string>", line 1
SyntaxError: more than 255 arguments

我想在某种程度上同情这些论点会导致这个问题。

我无法想出一个好方法。

2 个答案:

答案 0 :(得分:0)

显然Python 3.7(将于2018年发布)将是removing这个限制。我知道这对你现在没有帮助(除非你想在开发的Python上运行),但至少对未来有希望。

答案 1 :(得分:0)

我受了很多苦,但是我找到了解决方法。这是简单的示例。

  val finalSchema = StructType(Seq(
    StructField("date", DateType),
    StructField("account_name", StringType),
    StructField("adset_id", StringType),
    StructField("adset_name", StringType),
    StructField("campaign_id", StringType),
    StructField("campaign_name", StringType),
    StructField("pub_id", StringType),
    StructField("pub_name", StringType),
    StructField("creative_id", StringType),
    StructField("creative_name", StringType),
    StructField("platform", StringType),
    StructField("install_source", StringType),
    StructField("views", IntegerType),
    StructField("clicks", IntegerType),
    StructField("installs", IntegerType),
    StructField("cost", DoubleType)
  ))

诀窍是您不创建符号数组,而是创建矩阵符号。但是,我非常期待在Sympy中实现对普通数组进行lambdify的传递。