我有一个问题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
我想在某种程度上同情这些论点会导致这个问题。
我无法想出一个好方法。
答案 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的传递。