Closed
Description
The definition of argmax
from Wikipedia,
Given a collection of elements (domain), which map to an ordered set (range), what is the subset containing those elements in the domain whose image is the frontier.
Currently, argmax
is actually indmax
which is defined for indexed collections and returns the index of the first encountered element whose image is equal to the frontier. The generalization of keymax
(discussed, but not implemented) extends the supported collections from indexed to pairs
-implemented collections. This is the result of renaming indmax
to argmax
. A current proposal is for argmax
to be defined for Generator
(#27613),
argmax(f(x) for x ∈ domain)
with that change, we could fix the implementation with something like
import Base: Generator, argmax
function argmax(f::Function, domain::Generator)
T = eltype(domain)
tested = Set{T}()
output = Set{T}()
frontier = nothing
for elem ∈ domain
if !(elem ∈ tested)
push!(tested, elem)
value = f(elem)
if (frontier === nothing) || (value > frontier)
frontier = value
output = Set(elem)
elseif value == frontier
push!(output, elem)
end
end
end
return output
end
and call it with the following syntax
argmax(abs2, elem for elem ∈ -3:3) == Set([-3, 3])
Metadata
Metadata
Assignees
Labels
No labels