pp11
pp11

Reputation: 309

Julia: find maximum along columns in array

Suppose we have an array defined like this:

a=[1 2; 3 4; 5 5; 7 9; 1 2];

In Matlab, we could find the maximum values by writing:

 [x y] = max(a)
   x =
     7     9

In Julia, we could use:

  a=[1 2; 3 4; 5 5; 7 9; 1 2]
  findmax(a,1)

returning:

 ([7 9],

  [4 9])

However, I am interested not only in finding [7 9] for the two columns, but also their relative position within each column, like [4, 4]. Of course, I can write a bit more of coding lines, but can I do it directly with findmax?

Upvotes: 7

Views: 11444

Answers (3)

Bebotron
Bebotron

Reputation: 443

This is mentioned in the comments but I figured I'd do a response that's easy to see. I have version 1.0.3, so I don't know what's the earliest version that allows this. But now you can just do

julia> findmax(a) #Returns 2D index of overall maximum value
(9, CartesianIndex(4, 2))

julia> findmax(a[:,1]) #Returns 1D index of max value in column 1
(7, 4)

julia> findmax(a[:,2]) #Returns 1D index of max value in column 2
(9, 4)

Hope this makes things easier.

Upvotes: 2

Dave C
Dave C

Reputation: 1434

I've adopted the following function:

indmaxC(x) = cat(1, [indmax(x[:,c]) for c in 1:size(x,2)]...)
  • The Good: it's convenient and small
  • The Bad: it's only valid for 2-D arrays

A safer version would be:

function indmaxC(x::AbstractArray)
    assert(ndims(x)==2)
    cat(1, [indmax(x[:,c]) for c in 1:size(x,2)]...)
end

Upvotes: 0

mbauman
mbauman

Reputation: 31352

The second matrix returned by findmax is the linear index of the locations of the maxima over the entire array. You want the position within each column; to get that, you can convert the linear indices into subscripts with ind2sub. Then the first element of the subscript tuple is your row index.

julia> vals, inds = findmax(a, 1)
(
[7 9],

[4 9])

julia> map(x->ind2sub(a, x), inds)
1×2 Array{Tuple{Int64,Int64},2}:
 (4,1)  (4,2)

julia> map(x->ind2sub(a, x)[1], inds)
1×2 Array{Int64,2}:
 4  4

Upvotes: 8

Related Questions