2016-01-13 11 views
6

, numpy.argmax vardır: Numpy en argmax bir Julia analogNumpy.argmax için bir Julia analiği var mı? Python

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]) 

var mı? Yalnızca bir vektörü kabul eden indmax'u buldum, np.argmax olarak iki boyutlu bir dizi değil.

cevap

9

en hızlı uygulama genellikle (findmax olacak baştan azaltmasını sağlar: Bir 2D dizi yerine bir vektör elde etmek istiyorsanız

, sadece ifadenin sonuna [:] çakmak olabilir Bir kerede birden çok boyut, isterseniz) :

ile eşleştirildi
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 belgelerine göre argmax aşağıdaki işlevleri içerir:

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

bir eksen boyunca maksimum değerlerin indislerini döndürür.

Ben tek Julia işlevi bunu yapmaz şüphe fakat mapslices ve indmax birleştirerek sadece bilet: numpy en dizi indeksleme 0 ise Julia'nın dizi indeksleme (1 tabanlı olduğundan Tabii

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 

, sonuçta elde edilen Julia dizisinin her bir elemanı, sonuçta elde edilen Numpy dizisindeki karşılık gelen eleman ile karşılaştırıldığında 1 ile dengelenir. Bunu ayarlamak isteyebilir veya istemeyebilirsiniz.

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