参数多态性问题:使用带有单个浮点参数的函数和浮点参数数组

2024-10-01 04:53:42 发布

您现在位置:Python中文网/ 问答频道 /正文

为了澄清我的意思,我的问题是一个模拟退火问题,我想找到θ,它给出了形状的最大面积:

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正确输出

换言之,是否存在一个?它可以满足单个浮点参数的条件,但在某些邻域中携带所有可能的浮点参数?


Tags: 参数thatisdefareaspacesomereturns
2条回答

首先,不存在同时是浮点和集合的数据类型。此外,您希望将area函数直接传递到SimAnneal函数中,而不是像当前那样返回对它的调用:

SimAnneal(x, area, T)

从设计的角度来看,将area函数保留为使用单个浮点作为参数会更有意义。这就是说,通过一个列表运行单个函数并用θ存储这些输出是相对简单的,θ是使用一种称为Dictionary Comprehensions的技术创建的。在下面的示例中thetas是要从中选择的θ的列表:

areas = {i: area(i) for i in thetas}

然后,您可以在新词典中搜索产生最大面积的θ:

max_theta = list(areas.keys())[0] # retrieve the first theta

for theta, area in areas.items():
    if area > areas[theta]:
        max_theta = theta

return theta

可以使用^{}应用func获取单个值,如下所示:

import numpy as np

def Area(theta):
    pass

def SimAnneal(space, func, T):
    applied_space = np.vectorize(func)(space)

x = np.linspace(0, 100, 1000)
T = 4
SimAnneal(x, Area, T)

请注意np.vectorize实际上不会给您带来我们在实际矢量化中看到的性能改进。相反,它是一个方便的接口,完全符合您的需要:应用一个func,将单个值应用于一组值(您的space

或者,您可以将np.vectorize调用移到SimAnneal之外,如下所示:

def SimAnneal(space, func, T):
    applied_space = func(space)

x = np.linspace(0, 100, 1000)
func = np.vectorize(Area)
T = 4
SimAnneal(x, func, T)

这更接近您最初的示例

相关问题 更多 >