NumPy - Funzioni di ordinamento, ricerca e conteggio
Numerose funzioni relative all'ordinamento sono disponibili in NumPy. Queste funzioni di ordinamento implementano diversi algoritmi di ordinamento, ciascuno caratterizzato dalla velocità di esecuzione, dalle prestazioni nel caso peggiore, dallo spazio di lavoro richiesto e dalla stabilità degli algoritmi. La tabella seguente mostra il confronto di tre algoritmi di ordinamento.
genere | velocità | caso peggiore | spazio di lavoro | stabile |
---|---|---|---|---|
"quicksort" | 1 | O (n ^ 2) | 0 | no |
"mergesort" | 2 | O (n * log (n)) | ~ n / 2 | sì |
"heapsort" | 3 | O (n * log (n)) | 0 | no |
numpy.sort ()
La funzione sort () restituisce una copia ordinata dell'array di input. Ha i seguenti parametri:
numpy.sort(a, axis, kind, order)
Dove,
Sr.No. | Parametro e descrizione |
---|---|
1 | a Matrice da ordinare |
2 | axis L'asse lungo il quale deve essere ordinato l'array. In caso contrario, la matrice viene appiattita, ordinando sull'ultimo asse |
3 | kind L'impostazione predefinita è quicksort |
4 | order Se l'array contiene campi, l'ordine dei campi da ordinare |
Esempio
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')
Produrrà il seguente output:
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 ()
Il numpy.argsort()esegue un ordinamento indiretto sull'array di input, lungo l'asse dato e utilizzando un tipo specificato di ordinamento per restituire l'array di indici di dati. Questo array di indici viene utilizzato per costruire l'array ordinato.
Esempio
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],
Produrrà il seguente output:
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 ()
esegue un ordinamento indiretto utilizzando una sequenza di chiavi. Le chiavi possono essere viste come una colonna in un foglio di calcolo. La funzione restituisce una matrice di indici, utilizzando la quale è possibile ottenere i dati ordinati. Nota, che l'ultima chiave sembra essere la chiave primaria di ordinamento.
Esempio
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]
Produrrà il seguente output:
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.']
Il modulo NumPy ha una serie di funzioni per la ricerca all'interno di un array. Sono disponibili funzioni per trovare il massimo, il minimo e gli elementi che soddisfano una data condizione.
numpy.argmax () e numpy.argmin ()
Queste due funzioni restituiscono gli indici degli elementi massimo e minimo rispettivamente lungo l'asse dato.
Esempio
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
Produrrà il seguente output:
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 ()
Il numpy.nonzero() restituisce gli indici di elementi diversi da zero nell'array di input.
Esempio
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)
Produrrà il seguente output:
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 ()
La funzione where () restituisce gli indici degli elementi in un array di input in cui la condizione data è soddisfatta.
Esempio
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]
Produrrà il seguente output:
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 ()
Il extract() restituisce gli elementi che soddisfano qualsiasi condizione.
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)
Produrrà il seguente output:
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.]