这是我的代码在简化时的样子:
# This function returns some value depending on the index (integer)
# with which it is called.
def funct(index):
value <-- some_process[index]
# Return value for this index.
return value
允许的索引存储在列表中:
# List if indexes.
x = [0,1,2,3,...,1000]
我需要找到x
索引,该索引返回funct
的最小值。我可以应用强制方法并遍历完整的x
列表,将所有值存储在新列表中,然后只需找到np.argmin()
的最小值:
list_of_values = []
for indx in x:
f_x = funct(x)
list_of_values.append(f_x)
min_value = np.argmin(list_of_values)
我已经尝试了这个并且它可以工作,但是当x
包含太多元素时它变得相当昂贵。我正在寻找一种优化此过程的方法。
我知道scipy.optimize有一些优化函数可以找到全局最小值,例如anneal和basin-hopping,但我无法将它们正确地应用到我的代码中。
当我只能使用整数(索引)调用函数或是否要求函数连续时,是否可以使用这些优化工具?
答案 0 :(得分:4)
python内置min
接受key
函数:
min_idx = min(x, key=funct)
min_val = funct(min_idx)
这为你提供了一个O(n)解决方案,以及你将在python中实现的。