Search code examples
numpyjuliaargmax

Is there a Julia analogue to numpy.argmax?


In Python, there is numpy.argmax:

In [7]: a = np.random.rand(5,3)

In [8]: a
Out[8]: 
array([[ 0.00108039,  0.16885304,  0.18129883],
       [ 0.42661574,  0.78217538,  0.43942868],
       [ 0.34321459,  0.53835544,  0.72364813],
       [ 0.97914267,  0.40773394,  0.36358753],
       [ 0.59639274,  0.67640815,  0.28126232]])

In [10]: np.argmax(a,axis=1)
Out[10]: array([2, 1, 2, 0, 1])

Is there a Julia analogue to Numpy's argmax? I only found a indmax, which only accept a vector, not a two dimensional array as np.argmax.


Solution

  • The fastest implementation will usually be findmax (which allows you to reduce over multiple dimensions at once, if you wish):

    julia> a = rand(5, 3)
    5×3 Array{Float64,2}:
     0.867952  0.815068   0.324292
     0.44118   0.977383   0.564194
     0.63132   0.0351254  0.444277
     0.597816  0.555836   0.32167 
     0.468644  0.336954   0.893425
    
    julia> mxval, mxindx = findmax(a; dims=2)
    ([0.8679518267243425; 0.9773828942695064; … ; 0.5978162823947759; 0.8934254589671011], CartesianIndex{2}[CartesianIndex(1, 1); CartesianIndex(2, 2); … ; CartesianIndex(4, 1); CartesianIndex(5, 3)])
    
    julia> mxindx
    5×1 Array{CartesianIndex{2},2}:
     CartesianIndex(1, 1)
     CartesianIndex(2, 2)
     CartesianIndex(3, 1)
     CartesianIndex(4, 1)
     CartesianIndex(5, 3)