2016-01-13 9 views
6

अजगर में, वहाँ numpy.argmax है:क्या कोई जूलिया एनालॉग 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 हो जाएगा (आप पर कम करने के लिए अनुमति देता है जो:

आप एक 2 डी सरणी के बजाय एक वेक्टर प्राप्त करना चाहते हैं, तो आप बस [:] अभिव्यक्ति के अंत में हमले कर सकते हैं एक बार में कई आयाम, यदि आप चाहें) 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)

एक धुरी के साथ अधिकतम मान के सूचकांकों देता है।

मुझे शक है एक भी जूलिया समारोह है कि करता है, लेकिन संयोजन mapslices और indmax बस टिकट है:

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 
बेशक

, क्योंकि जूलिया की सरणी अनुक्रमण 1-आधारित है (जबकि Numpy की सरणी अनुक्रमण 0 है -आधारित), परिणामस्वरूप जूलिया सरणी के प्रत्येक तत्व को परिणामी Numpy सरणी में संबंधित तत्व की तुलना में 1 से ऑफसेट किया जाता है। आप इसे समायोजित करना चाहते हैं या नहीं भी कर सकते हैं।

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