2016-01-13 69 views
6

在Python,有numpy.argmax有沒有Julia類似於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?我只發現了一個indmax,它只接受一個向量,而不是一個二維數組,如np.argmax

回答

9

最快的實現通常是findmax(它可以讓你減少了過來:

如果你想獲得一個載體,而不是一個二維數組,你可以簡單地在表達的最後釘[:]多個尺寸一次,如果你願意)加上ind2sub

julia> a=rand(5,3) 
5x3 Array{Float64,2}: 
0.283078 0.202384 0.667838 
0.366416 0.671204 0.572707 
0.77384 0.919672 0.127949 
0.873921 0.9334 0.0210074 
0.319042 0.200109 0.0944871 

julia> mxval, mxindx = findmax(a, 2) 
(
5x1 Array{Float64,2}: 
0.667838 
0.671204 
0.919672 
0.9334 
0.319042, 

5x1 Array{Int64,2}: 
11 
7 
8 
9 
5) 

julia> ind2sub(size(a), vec(mxindx))[2] 
5-element Array{Int64,1}: 
3 
2 
2 
2 
1 
3

按照numpy的文檔,argmax提供了以下功能:

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

返回最大值的索引沿軸線。

我懷疑一個朱莉婭功能確實如此,但結合mapslicesindmax是票:

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(indmax, a, 2) 
5x1 Array{Int64,2}: 
3 
2 
3 
1 
2 

當然,因爲Julia的數組索引是從1開始的(而與NumPy的數組索引是0基於此),生成的Julia數組的每個元素與生成的Numpy數組中的對應元素相比偏移1。你可能會也可能不想調整。

julia> b = mapslices(indmax,a,2)[:] 
5-element Array{Int64,1}: 
3 
2 
3 
1 
2 
相關問題