如何解决参数多态问题:使用带有单个浮点参数和浮点参数数组的函数
为弄清我的意思,我的问题是模拟退火问题,我想找到使形状最大面积最大的theta:
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()的输入是单个theta,但是我希望有某种方法可以制作?下一个函数SimAnneal()可以选择的theta的“潜在”列表。
x = np.linspace(0,100,1000)
func = area(?)
T = 4
SimAnneal(x,T)
我应该放入什么?以便SimAnneal正确输出。
换句话说,是否存在?可以满足成为单个float参数但在某个linspace中包含所有可能的float参数的条件?
解决方法
您可以使用np.vectorize
来应用采用单个值的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,T):
applied_space = func(space)
x = np.linspace(0,1000)
func = np.vectorize(Area)
T = 4
SimAnneal(x,T)
这更接近您的原始示例。
,首先,没有既是浮点型又是集合的数据类型。此外,您希望将area函数直接传递到SimAnneal
函数中,而不是像当前那样返回对它的调用:
SimAnneal(x,area,T)
从设计的角度来看,保留area
函数就像将单个float作为参数一样有意义。话虽如此,通过列表运行单个函数并使用称为Dictionary Comprehensions的技术将这些输出与创建该函数的theta进行存储相对简单。在下面的示例中,thetas
是您要选择的theta列表:
areas = {i: area(i) for i in thetas}
然后您可以从那里搜索新词典以找到面积最大的theta:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。