我试图创建一个接收n个变量并返回具有一个变量的相同函数的函数。我的目的是在一个函数内进行多维搜索,以找到它的最大点。
假设有一个函数f(x1,x2,x3) = x1x2+4x3
我的算法的第一阶段将随机选择一个起点:x0 = (1,2,6)
现在我对每个阶段有3次迭代(每个变量一次)
第一个: f (x0 +θ* (1,0,0))= f1(θ)= (1 +,)2 + 46
现在为了找到最佳方向,我将在f1(θ)上应用黄金分割假设我收到θ = 2
我的新x0将是(1+2,2,6)和age ->f (x0 +, *(0,1,0)→金片→最佳…
我的问题是如何使一个通用函数接收多个变量并返回一个变量的函数,而不知道哪个接收到的变量是与
你知道怎么实现吗?
我提出的问题的解决方案在这里:
def func(*args):
x = []
if args[0] == []:
x.append(args[1])
for i in args[2]:
x.append(i)
elif args[2] == []:
for i in args[0]:
x.append(i)
x.append(args[1])
elif args[2] == [] and args[0] == []:
x.append(args[1])
else:
for i in args[0]:
x.append(i)
x.append(args[1])
for i in args[2]:
x.append(i)
# write your target function
h = (x[0] - 3) ** 2 + (x[1] - 2) ** 2 - x[0] * x[1] + x[2] + x[3]
return h
def flatten(funci, *args, i,theta):
lst1 = []
lst2 = []
for j in range(len(args[0])):
if j < i:
lst1.append(args[0][j])
elif j > i:
lst2.append(args[0][j])
def inner(x):
return funci(lst1, theta+x, lst2)
return inner
p = [1.0, 4.0, 7.0, 6.0]
s = flatten(func, p, i=2,theta=4)
print(s(2.0))
我试图理解你的意图,而不是你的非常混乱和令人困惑的例子。这是我写的:
def flatten(func, *args):
def inner(x):
return func(x,*args[1:])
return inner
示例1
def f(x,y,z):
return x+y+z
f2 = flatten(f,1,2,3)
print(f2(10))
# 15
示例2
def g(sta, stb):
return sta+" says hello "+stb
g2 = flatten(g,"Max","Tom")
print(g2("Wanda"))
# Wanda says hello Tom
示例3(带有可变的扁平参数)
def h(x, list):
return [x+i for i in list]
l = [1,2,3]
h2 = flatten(h,1,l)
print(h2(10))
[11, 12, 13]
l[0]=11
print(h2(10))
[21, 12, 13]