我有一个庞大的SymPy函数列表(实质上是函数表达式的字符串表示)。我需要做的是使用lambdify将这些符号函数转换为NumPy函数,以进行多种有效的评估。 Lambdify基本上只接受一个函数的字符串表示,在前面连接一个“lambda * args:”(必须提供args列表)并将其传递给eval()。嗯,显然它还有更多,但内部细节在这里并不重要。看起来像是这样做会非常方便:
f = lambdify(args,str(list_of_functions),"numpy")
事实上确实有效。这将创建一个函数f(* args),对于给定的参数值集,它返回所有已评估的原始函数的列表。所以最后的效果正是我所需要的。
问题是当list_of_functions非常大时,lambda的编译会占用大量内存(50,000个函数大约需要1GiB)。返回lambda后立即释放此内存,但如果在编译时它不可用,系统将终止python进程。我的问题是,这里发生了什么,是否有一些聪明的方法可以解决大量的内存消耗?