1

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

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

我想 sympy 在某些时候会使论点变平,因此会导致这个问题。

我想不出一个好的解决方法。

4

2 回答 2

1

我受了很多苦,但我找到了解决办法。这是一个简单的例子。

import sympy as sym
import numpy as np

A = sym.MatrixSymbol('A', 1, 260)
f = np.prod(A)
func = sym.lambdify(A, f)
aa = np.ones((1, 260))
print(func(aa))

诀窍是您不创建符号数组,而是创建矩阵符号。但我非常期待将传递给普通数组的 Sympy 实现。

于 2018-08-01T16:52:41.003 回答
1

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

于 2017-07-21T20:49:50.207 回答