NumPy - Sıralama, Arama ve Sayma İşlevleri

NumPy'de sıralama ile ilgili çeşitli işlevler mevcuttur. Bu sıralama işlevleri, her biri yürütme hızı, en kötü durum performansı, gerekli çalışma alanı ve algoritmaların kararlılığı ile karakterize edilen farklı sıralama algoritmaları uygular. Aşağıdaki tablo, üç sıralama algoritmasının karşılaştırmasını göstermektedir.

tür hız En kötü durumda çalışma alanı kararlı
'hızlı sıralama' 1 O (n ^ 2) 0 Hayır
"birleştirme" 2 O (n * log (n)) ~ n / 2 Evet
"heapsort" 3 O (n * log (n)) 0 Hayır

numpy.sort ()

Sort () işlevi, girdi dizisinin sıralanmış bir kopyasını döndürür. Aşağıdaki parametrelere sahiptir -

numpy.sort(a, axis, kind, order)

Nerede,

Sr.No. Parametre ve Açıklama
1

a

Sıralanacak dizi

2

axis

Dizinin sıralanacağı eksen. Hiçbiri değilse, dizi son eksende sıralanarak düzleştirilir

3

kind

Varsayılan hızlı sıralamadır

4

order

Dizi alanlar içeriyorsa, sıralanacak alanların sırası

Misal

import numpy as np  
a = np.array([[3,7],[9,1]]) 

print 'Our array is:' 
print a 
print '\n'

print 'Applying sort() function:' 
print np.sort(a) 
print '\n' 
  
print 'Sort along axis 0:' 
print np.sort(a, axis = 0) 
print '\n'  

# Order parameter in sort function 
dt = np.dtype([('name', 'S10'),('age', int)]) 
a = np.array([("raju",21),("anil",25),("ravi", 17), ("amar",27)], dtype = dt) 

print 'Our array is:' 
print a 
print '\n'  

print 'Order by name:' 
print np.sort(a, order = 'name')

Aşağıdaki çıktıyı üretecek -

Our array is:
[[3 7]
 [9 1]]

Applying sort() function:
[[3 7]
 [1 9]]

Sort along axis 0:
[[3 1]
 [9 7]]

Our array is:
[('raju', 21) ('anil', 25) ('ravi', 17) ('amar', 27)]

Order by name:
[('amar', 27) ('anil', 25) ('raju', 21) ('ravi', 17)]

numpy.argsort ()

numpy.argsort()işlevi, girdi dizisi üzerinde, verilen eksen boyunca dolaylı bir sıralama gerçekleştirir ve veri dizin dizisini döndürmek için belirli bir sıralama türü kullanır. Bu indeks dizisi, sıralı diziyi oluşturmak için kullanılır.

Misal

import numpy as np 
x = np.array([3, 1, 2]) 

print 'Our array is:' 
print x 
print '\n'  

print 'Applying argsort() to x:' 
y = np.argsort(x) 
print y 
print '\n'  

print 'Reconstruct original array in sorted order:' 
print x[y] 
print '\n'  

print 'Reconstruct the original array using loop:' 
for i in y: 
   print x[i],

Aşağıdaki çıktıyı üretecek -

Our array is:
[3 1 2]

Applying argsort() to x:
[1 2 0]

Reconstruct original array in sorted order:
[1 2 3]

Reconstruct the original array using loop:
1 2 3

numpy.lexsort ()

işlevi, bir dizi tuş kullanarak dolaylı bir sıralama gerçekleştirir. Anahtarlar, bir elektronik tabloda bir sütun olarak görülebilir. İşlev, sıralanan verilerin elde edilebileceği bir dizi dizin döndürür. Son anahtarın, sıralamanın birincil anahtarı olduğunu unutmayın.

Misal

import numpy as np 

nm = ('raju','anil','ravi','amar') 
dv = ('f.y.', 's.y.', 's.y.', 'f.y.') 
ind = np.lexsort((dv,nm)) 

print 'Applying lexsort() function:' 
print ind 
print '\n'  

print 'Use this index to get sorted data:' 
print [nm[i] + ", " + dv[i] for i in ind]

Aşağıdaki çıktıyı üretecek -

Applying lexsort() function:
[3 1 0 2]

Use this index to get sorted data:
['amar, f.y.', 'anil, s.y.', 'raju, f.y.', 'ravi, s.y.']

NumPy modülünün bir dizi içinde arama yapmak için bir dizi işlevi vardır. Maksimum, minimum ve belirli bir koşulu karşılayan öğeleri bulmak için işlevler mevcuttur.

numpy.argmax () ve numpy.argmin ()

Bu iki işlev, verilen eksen boyunca sırasıyla maksimum ve minimum elemanların indislerini döndürür.

Misal

import numpy as np 
a = np.array([[30,40,70],[80,20,10],[50,90,60]]) 

print 'Our array is:' 
print a 
print '\n' 

print 'Applying argmax() function:' 
print np.argmax(a) 
print '\n'  

print 'Index of maximum number in flattened array' 
print a.flatten() 
print '\n'  

print 'Array containing indices of maximum along axis 0:' 
maxindex = np.argmax(a, axis = 0) 
print maxindex 
print '\n'  

print 'Array containing indices of maximum along axis 1:' 
maxindex = np.argmax(a, axis = 1) 
print maxindex 
print '\n'  

print 'Applying argmin() function:' 
minindex = np.argmin(a) 
print minindex 
print '\n'  
   
print 'Flattened array:' 
print a.flatten()[minindex] 
print '\n'  

print 'Flattened array along axis 0:' 
minindex = np.argmin(a, axis = 0) 
print minindex
print '\n'

print 'Flattened array along axis 1:' 
minindex = np.argmin(a, axis = 1) 
print minindex

Aşağıdaki çıktıyı üretecek -

Our array is:
[[30 40 70]
 [80 20 10]
 [50 90 60]]

Applying argmax() function:
7

Index of maximum number in flattened array
[30 40 70 80 20 10 50 90 60]

Array containing indices of maximum along axis 0:
[1 2 0]

Array containing indices of maximum along axis 1:
[2 0 1]

Applying argmin() function:
5

Flattened array:
10

Flattened array along axis 0:
[0 1 1]

Flattened array along axis 1:
[0 2 0]

numpy.nonzero ()

numpy.nonzero() işlev, girdi dizisindeki sıfır olmayan öğelerin dizinlerini döndürür.

Misal

import numpy as np 
a = np.array([[30,40,0],[0,20,10],[50,0,60]]) 

print 'Our array is:' 
print a 
print '\n'  

print 'Applying nonzero() function:' 
print np.nonzero (a)

Aşağıdaki çıktıyı üretecek -

Our array is:
[[30 40 0]
 [ 0 20 10]
 [50 0 60]]

Applying nonzero() function:
(array([0, 0, 1, 1, 2, 2]), array([0, 1, 1, 2, 0, 2]))

numpy.where ()

Where () işlevi, verilen koşulun karşılandığı bir girdi dizisindeki öğelerin dizinlerini döndürür.

Misal

import numpy as np 
x = np.arange(9.).reshape(3, 3) 

print 'Our array is:' 
print x  

print 'Indices of elements > 3' 
y = np.where(x > 3) 
print y  

print 'Use these indices to get elements satisfying the condition' 
print x[y]

Aşağıdaki çıktıyı üretecek -

Our array is:
[[ 0. 1. 2.]
 [ 3. 4. 5.]
 [ 6. 7. 8.]]

Indices of elements > 3
(array([1, 1, 2, 2, 2]), array([1, 2, 0, 1, 2]))

Use these indices to get elements satisfying the condition
[ 4. 5. 6. 7. 8.]

numpy.extract ()

extract() function herhangi bir koşulu karşılayan öğeleri döndürür.

import numpy as np 
x = np.arange(9.).reshape(3, 3) 

print 'Our array is:' 
print x  

# define a condition 
condition = np.mod(x,2) == 0 

print 'Element-wise value of condition' 
print condition  

print 'Extract elements using condition' 
print np.extract(condition, x)

Aşağıdaki çıktıyı üretecek -

Our array is:
[[ 0. 1. 2.]
 [ 3. 4. 5.]
 [ 6. 7. 8.]]

Element-wise value of condition
[[ True False True]
 [False True False]
 [ True False True]]

Extract elements using condition
[ 0. 2. 4. 6. 8.]