我正在进行优化,我想编写一个函数,我可以在其中使用sub()大量的变量。 为此,我用n个变量生成了一个m函数。例如,假设3个函数和2个变量。
num_var=2
x=symbols('x0:num_var')
我生成了这个函数:
f=[5*x0 + 4*x1 + 6, -4*x0 - 5*x1 - 6, -8*x0 - 10]
我有点像:
point=[-2.8,1.74]
如果我想在每个函数中使用sub(),那么最快的方法是什么?
f[0].subs([(x[0],point[0]),(x[1],point[1])])
(这将评估第一个功能) 我在列表中得到三个函数评估:
fun_eval=[some number,some number, ... (in size of number of functions)]
问题是我如何编写代码来对大量函数中的大量变量进行评估?
答案 0 :(得分:1)
>>> from sympy import *
>>> x0, x1 = x = symbols('x:2')
>>> f = [5*x0+4*x1+6, -4*x0-5*x1-6, -8*x0-10]
>>> point = (-2.8, 1.74)
>>> [fi.subs(zip(x, point)) for fi in f]
[-1.04000000000000, -3.50000000000000, 12.4000000000000]
答案 1 :(得分:0)
见http://docs.sympy.org/latest/tutorial/basic_operations.html#lambdify。如果要在大量点上有效地评估函数,则应使用lambdify
。
>>> func = lambdify(x, f)
>>> func(*point)
[-1.04, -3.5, 12.399999999999999]
默认情况下,它使用sub,但如果您安装了numpy
,则可以将module="numpy"
传递给lambdify
,以便更快地进行评估。
顺便说一句,您的symbols('x0:num_var')
实际上并未使用num_var
变量。您需要使用symbols('x0:%d' % num_var)
。