为了澄清我的意思,我的问题是一个模拟退火问题,我想找到θ,它给出了形状的最大面积:
def Area(theta):
#returns area
def SimAnneal(space,func, T):
#space is some linspace
#func is some function that takes in some theta and outputs some area
#T = separate temperature parameter that is not relevant for problem
#returns maximum area from given thetas
在这种情况下,模拟退火首先选择一个随机开始的“θ”。我的目标是使用上面的设置,如下所示。应该注意的是,area()的输入是一个θ,但我希望有某种方法可以使?下一个函数SimAnneal()可以从中选择的θ的“潜在”列表
x = np.linspace(0,100,1000)
func = area(?)
T = 4
SimAnneal(x,func,T)
我应该放什么?为了使SimAnneal正确输出
换言之,是否存在一个?它可以满足单个浮点参数的条件,但在某些邻域中携带所有可能的浮点参数?
首先,不存在同时是浮点和集合的数据类型。此外,您希望将area函数直接传递到
SimAnneal
函数中,而不是像当前那样返回对它的调用:从设计的角度来看,将
area
函数保留为使用单个浮点作为参数会更有意义。这就是说,通过一个列表运行单个函数并用θ存储这些输出是相对简单的,θ是使用一种称为Dictionary Comprehensions的技术创建的。在下面的示例中thetas
是要从中选择的θ的列表:然后,您可以在新词典中搜索产生最大面积的θ:
可以使用^{} 应用
func
获取单个值,如下所示:请注意
np.vectorize
实际上不会给您带来我们在实际矢量化中看到的性能改进。相反,它是一个方便的接口,完全符合您的需要:应用一个func
,将单个值应用于一组值(您的space
)或者,您可以将
np.vectorize
调用移到SimAnneal
之外,如下所示:这更接近您最初的示例
相关问题 更多 >
编程相关推荐