Is there a simple way to make a maximum tuple value (similar to python)?
For example, in python
max([ (1,2), (1,3), (3,1), (4,0) ])
returns (4,0), using lexicographic order.
If I have a tensor in Mathematica, is there a way to take the max without flattening it?
i.e. a way to call
Max[ { {1,2}, {1,3}, {3,1}, {4,0} } ]
so that it returns {4,0} instead of 4?
Answer
It's not clear to me from the question what you expect for { {1,2}, {1,3}, {3,1}, {4,0}, {2,3} } -- is {2,3} to be returned because it has the largest sum, or {4,0} because it will sort into the last place? I am assuming that you want the largest sum but you want to break ties based on lexicographic order. You can do that like this:
a = {{1, 2}, {1, 3}, {4, 0}, {3, 1}};
Last @ SortBy[a, {Total, Identity}]
{4, 0}
Or more tersely: Last @ SortBy[a, {Tr, # &}]
If you just want the last element of the list after lexicographic sort you can use:
a = {{1, 2}, {1, 3}, {4, 0}, {3, 1}, {2, 3}}; (* note inclusion of {2,3} *)
Last @ Sort @ a
{4, 0}
But there is a more efficient way which is faster than a full sort:
a ~Extract~ Ordering[a, -1]
{4, 0}
More examples of this last form: (1) (2) (3)
Comments
Post a Comment