Mathematica 有一个内置函数ArgMax,用于基于标准数学定义的无限域上的函数。
有限域的类比是一种方便的效用函数。给定一个函数和一个列表(称其为函数的域),返回列表中使函数最大化的元素。下面是一个有限 argmax 的例子: Canonicalize NFL team names
这是我的实现(连同 argmin 一起):
(* argmax[f, domain] returns the element of domain for which f of
that element is maximal -- breaks ties in favor of first occurrence. *)
SetAttributes[{argmax, argmin}, HoldFirst];
argmax[f_, dom_List] := Fold[If[f[#1]>=f[#2], #1, #2]&, First[dom], Rest[dom]]
argmin[f_, dom_List] := argmax[-f[#]&, dom]
首先,这是实现 argmax 的最有效方式吗?如果您想要所有最大元素的列表而不仅仅是第一个元素怎么办?
其次,相关函数 posmax 怎么样,它不是返回最大元素,而是返回最大元素的位置?