有类似于numpy.argmax的Julia吗?

有类似于numpy.argmax的Julia吗?,numpy,julia,argmax,Numpy,Julia,Argmax,在Python中,有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.407733

在Python中,有
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])

有类似于Numpy的argmax的Julia吗?我只找到了一个
indmax
,它只接受向量,不接受二维数组作为
np。argmax

根据Numpy文档,提供以下功能:

numpy.argmax(a,axis=None,out=None)

返回沿轴的最大值的索引

我怀疑一个Julia函数能做到这一点,但组合和只是一张票:

julia> a = [ 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] :: Array{Float64,2}

julia> mapslices(argmax,a,dims=2)
5x1 Array{Int64,2}:
 3
 2
 3
 1
 2
当然,由于Julia的数组索引是基于1的(而Numpy的数组索引是基于0的),因此结果Julia数组的每个元素相对于结果Numpy数组中的相应元素偏移1。您可能想调整,也可能不想调整

如果要获取向量而不是2D数组,只需在表达式末尾添加
[:]

julia> b = mapslices(argmax,a,dims=2)[:]
5-element Array{Int64,1}:
 3
 2
 3
 1
 2

最快的实现通常是
findmax
(如果您愿意,它允许您一次减少多个维度):


为了补充jub0bs的答案,在Julia 1+中,通过将
替换为
dims
关键字,沿给定维度返回而不是索引,反映了
np.argmax
的行为:

julia>  a = [ 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] :: Array{Float64,2}

julia> argmax(a, dims=2)
5×1 Array{CartesianIndex{2},2}:
CartesianIndex(1, 3)
CartesianIndex(2, 2)
CartesianIndex(3, 3)
CartesianIndex(4, 1)
CartesianIndex(5, 2)

ind2sub
已在0.7:中删除,请改用CartesianIndex。从Julia 0.7开始,请改用
argmax
而不是
indmax
:@BoZenKhaa请随意编辑我的问题。
julia>  a = [ 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] :: Array{Float64,2}

julia> argmax(a, dims=2)
5×1 Array{CartesianIndex{2},2}:
CartesianIndex(1, 3)
CartesianIndex(2, 2)
CartesianIndex(3, 3)
CartesianIndex(4, 1)
CartesianIndex(5, 2)