NumPy - Функции сортировки, поиска и подсчета
В NumPy доступны различные функции, связанные с сортировкой. Эти функции сортировки реализуют различные алгоритмы сортировки, каждый из которых характеризуется скоростью выполнения, производительностью наихудшего случая, требуемым рабочим пространством и стабильностью алгоритмов. В следующей таблице показано сравнение трех алгоритмов сортировки.
своего рода | скорость | худший случай | рабочая среда | стабильный |
---|---|---|---|---|
'quicksort' | 1 | О (п ^ 2) | 0 | нет |
'Сортировка слиянием' | 2 | O (п * журнал (п)) | ~ n / 2 | да |
'heapsort' | 3 | O (п * журнал (п)) | 0 | нет |
numpy.sort ()
Функция sort () возвращает отсортированную копию входного массива. Он имеет следующие параметры -
numpy.sort(a, axis, kind, order)
Где,
Sr. No. | Параметр и описание |
---|---|
1 | a Массив для сортировки |
2 | axis Ось, по которой нужно отсортировать массив. Если нет, массив выравнивается, сортировка по последней оси |
3 | kind По умолчанию - быстрая сортировка |
4 | order Если массив содержит поля, порядок сортировки полей |
пример
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')
Он выдаст следующий результат -
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()Функция выполняет непрямую сортировку входного массива по заданной оси и с использованием указанного вида сортировки для возврата массива индексов данных. Этот массив индексов используется для построения отсортированного массива.
пример
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],
Он выдаст следующий результат -
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 ()
функция выполняет косвенную сортировку с использованием последовательности ключей. Ключи можно увидеть в виде столбца в электронной таблице. Функция возвращает массив индексов, с помощью которых можно получить отсортированные данные. Обратите внимание, что последний ключ является первичным ключом сортировки.
пример
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]
Он выдаст следующий результат -
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 имеет ряд функций для поиска внутри массива. Доступны функции для поиска максимума, минимума, а также элементов, удовлетворяющих заданному условию.
numpy.argmax () и numpy.argmin ()
Эти две функции возвращают индексы максимального и минимального элементов соответственно по заданной оси.
пример
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
Он выдаст следующий результат -
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() функция возвращает индексы ненулевых элементов во входном массиве.
пример
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)
Он выдаст следующий результат -
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 () возвращает индексы элементов во входном массиве, где выполняется данное условие.
пример
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]
Он выдаст следующий результат -
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() функция возвращает элементы, удовлетворяющие любому условию.
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)
Он выдаст следующий результат -
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.]