2013-05-03 2 views
2

Существует ли встроенная функция в Python, которая может найти лучшее значение, которое удовлетворяет некоторому условию (заданному funciton)? Например, что-то вместо этого кода:Существует ли встроенная функция в Python для поиска наилучшего значения, которое удовлетворяет некоторому условию?

def argmin(seq, fn): 
    best = seq[0]; best_score = fn(best) 
    for x in seq: 
     x_score = fn(x) 
     if x_score < best_score: 
      best, best_score = x, x_score 
    return best 

ответ

9

Я полагаю, на «лучший» вы имеете в виду высокий, в этом случае ответ прост - max().

Требуется аргумент key, который будет вашей функцией.

max(data, key=score) 

Естественно, если «лучший» означает низкий, так как DSM указывает, то вы просто хотите min() вместо этого, он делает то, что он говорит по олову.

+2

Я думаю, что OP после min, not max: код возвращает минимизирующее значение. – DSM

+0

+1 - не знал о аргументе 'key'. – Aya

1

В общем, вы хотите функцию reduce, но, как и раньше, @Lattyware said, вашего конкретного примера, max будет достаточно.

+2

Как педантичное примечание, как правило, лучше всего ссылаться на ответы, поскольку «выше» не означает многого, когда список ответов может перемещаться на основе оценок. Просто нажмите «поделиться» ниже сообщения, чтобы получить ссылку. Это может даже дать вам [значок] (http://stackoverflow.com/badges/260/announcer). –

0

Если все, что вы хотите - это строгая оптимизация одного параметра, максимальная и минимальная работа отлично работают. Тем не менее, наиболее интересные проблемы (на мой взгляд) полагаются на оптимизацию, по меньшей мере, двух параметров сразу по некоторому параметру стоимости. Для любой нелинейной оптимизации я настоятельно рекомендую модуль оптимизации scipy. Документацию для этого можно найти here.

SLSQP - это самый гибкий алгоритм оптимизации, который может быть вам полезен.

+0

scipy не встроен, что и требовалось от OP, – hd1

+0

Правда, но я чувствую, что numpy и scipy должны быть включены в любой серьезный арсенал пользователя python по умолчанию. –

Смежные вопросы