gpt4 book ai didi

python - 参数为函数的 lambda 化函数的 Lambda

转载 作者:行者123 更新时间:2023-12-01 07:35:42 25 4
gpt4 key购买 nike

我目前正在尝试创建一个 lambda 函数,它将变量传递给作为 lambda 化函数输入的函数以及 lambda 化函数本身。我的Python版本是2.7,我的sympy版本是1.3。

当传递正确的参数 (Y) 时,我能够让羔羊函数 (f) 正常工作。然后,我尝试创建一个 lambda 函数,它将变量 (z) 传递给函数 (controlFunc),然后将其输入到我的lambdaify 函数 (f) 中。

问题似乎是 lambda 函数每次迭代都会使用最新的lambda函数(它应该)并更新所有以前的lambda函数以也使用最新的lambda函数。我相信这不是我的代码中的错误,但我很容易出错。

我尝试将lambda函数设置为变量,然后从中创建一个lambda函数。我尝试在 lambda 函数中使用整个lambdaify 函数。我什至尝试使用列表理解(我相信这是正确的术语)来评估列表中lambda的每个lambda。

import sympy as sy
import numpy as np
r,s,t,v,w,x,y = sy.symbols('r,s,t,v,w,x,y')

variables = [[t,v,w,x,y]]
inputs = [[r,s]]
L = [[]]
controlledSim = True
ctrl_input = [[10., 10.]]
def controlFunc(x,controlDict):
return ctrl_input[0]

control = [controlFunc for i in range(10)]
controlDict = []
func = [sy.Matrix([[1.*r*s*t*v*w*x*y],
[2.*r*s*t*v*w*x*y],
[3.*r*s*t*v*w*x*y],
[4.*r*s*t*v*w*x*y],
[5.*r*s*t*v*w*x*y]])]

X = [1.,1.,1.,1.,1.]
Y = [1.,1.,1.,1.,1.,10.,10.]

for j in range(len(L)):
if controlledSim == True:
func[j] = list(func[j])
temp = [[] for i in range(len(func[j]))]
f = [[] for i in range(len(func[j]))]
for i in range(len(func[j])):
f[i] = sy.lambdify([np.append(variables[j],inputs[j])], func[j][i])
temp[i] = lambda z: f[i](np.append(z,control[i](z,controlDict)))
func_lambda = lambda z: np.array([lamb(z) for lamb in temp]).T

我知道 func_lambda(X) 的输出应该是一个 [100.,200.,300.,400.,500.] 的数组。

我当前的结果是 [500.,500.,500.,500.,500.] 的数组。

最佳答案

这是循环内 lambda 函数的常见问题。 Lambda 表达式在调用时解析(不是在循环期间而是在循环之后)。考虑以下轻微修正:

temp[i] = lambda z, i=i: f[i](np.append(z,control[i](z,controlDict)))

i=i 是默认参数值,因此它在函数定义时解析。通过此修改,func_lambda(X) 给出了 [100. 200. 300. 400. 500.].

我使用 python 3。但是这种方式也应该适用于 python 2。尝试一下。

关于python - 参数为函数的 lambda 化函数的 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56998432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com