und

NumPy bietet verschiedene Sortiermethoden. Diese Sortierfunktionen implementieren unterschiedliche Sortieralgorithmen, die jeweils durch Ausführungsgeschwindigkeit, Worst-Case-Leistung, benötigten Arbeitsbereich und Algorithmusstabilität gekennzeichnet sind. Die folgende Tabelle zeigt einen Vergleich von drei Sortieralgorithmen.

Art Geschwindigkeit Schlechtester Fall Arbeitsbereich Stabilität
'quicksort'(quicksort) 1 O(n^2) 0 nein
'mergesort'(mergesort) 2 O(n*log(n)) ~n/2 Ja
'heapsort'(heapsort) 3 O(n*log(n)) 0 nein

numpy.sort()

Die Funktion numpy.sort() gibt eine sortierte Kopie des Eingabe-Arrays zurück. Das Funktionsformat lautet wie folgt:

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

Parameter description:

  • a: Das zu sortierende Array
  • axis: Die Achse, entlang der das Array sortiert wird. Wenn nicht angegeben, wird das Array abgeflacht und entlang der letzten Achse sortiert. axis=0 sortiert nach Spalte, axis=1 sortiert nach Zeile.
  • kind: Standard ist 'quicksort'
  • order: Wenn das Array Felder enthält, gibt dies das Feld bzw. die Felder an, nach denen sortiert werden soll

beziehungsweise.

import numpy as np a = np.array([[3,7],[9,1]]) print ('Unser Array ist:') print (a) print ('\n') print ('Aufruf der sort()-Funktion:') print (np.sort(a)) print ('\n') print ('Nach Spalte sortieren:') print (np.sort(a, axis = 0)) print ('\n') # Felder in der sort-Funktion sortieren dt = np.dtype([('name', 'S10'),('age', int)]) a = np.array([("raju",21),("anil",25),("ravi", 17), ("amar",27)], dtype = dt) print ('Unser Array ist:') print (a) print ('\n') print ('Nach Name sortieren:') print (np.sort(a, order = 'name'))

Das Ausgabeergebnis ist:

我们的数组是:
[[3 7]
 [9 1]]


调用 sort() 函数:
[[3 7]
 [1 9]]


按列排序:
[[3 1]
 [9 7]]


我们的数组是:
[(b'raju', 21) (b'anil', 25) (b'ravi', 17) (b'amar', 27)]


按 name 排序:
[(b'amar', 27) (b'anil', 25) (b'raju', 21) (b'ravi', 17)]

numpy.argsort()

Die Funktion numpy.argsort() gibt die Indizes zurück, die die Array-Werte vom kleinsten zum größten sortieren würden.

Beispiel

import numpy as np x = np.array([3, 1, 2]) print ('Unser Array ist:') print (x) print ('\n') print ('Aufruf der Funktion argsort() auf x:') y = np.argsort(x) print (y) print ('\n') print ('Stellen Sie das ursprüngliche Array in sortierter Reihenfolge wieder her:') print (x[y]) print ('\n') print ('Stellen Sie das ursprüngliche Array mit einer Schleife wieder her:') for i in y: print (x[i], end=" ")

Das Ausgabeergebnis ist:

我们的数组是:
[3 1 2]


对 x 调用 argsort() 函数:
[1 2 0]


以排序后的顺序重构原数组:
[1 2 3]


使用循环重构原数组

1 2 3

numpy.lexsort()

numpy.lexsort() wird verwendet, um mehrere Sequenzen zu sortieren. Stellen Sie es sich wie das Sortieren einer Tabellenkalkulation vor, bei der jede Spalte eine Sequenz darstellt und beim Sortieren den späteren Spalten Vorrang eingeräumt wird.

Hier ist ein Anwendungsszenario: Bei der Aufnahmeprüfung von der Grundschule zur weiterführenden Schule werden Schüler anhand der Gesamtpunktzahl in ausgewählte Klassen aufgenommen. Bei gleicher Gesamtpunktzahl werden Schüler mit höherer Mathematikpunktzahl zuerst aufgenommen; wenn sowohl Gesamtpunktzahl als auch Mathematikpunktzahl gleich sind, erfolgt die Aufnahme anhand der Englischpunktzahl... Hier wird die Gesamtpunktzahl in die letzte Spalte der Tabellenkalkulation eingetragen, die Mathematikpunktzahl in die vorletzte Spalte und die Englischpunktzahl in die drittletzte Spalte.

Beispiel

import numpy as np nm = ('raju','anil','ravi','amar') dv = ('f.y.', 's.y.', 's.y.', 'f.y.') ind = np.lexsort((dv,nm)) print ('Aufruf der Funktion lexsort():') print (ind) print ('\n') print ('Verwenden Sie diesen Index, um die sortierten Daten zu erhalten:') print ([nm[i] + ", " + dv[i] for i in ind])

Das Ausgabeergebnis ist:

调用 lexsort() 函数:
[3 1 0 2]


使用这个索引来获取排序后的数据:
['amar, f.y.', 'anil, s.y.', 'raju, f.y.', 'ravi, s.y.']

Was oben an np.lexsort übergeben wurde, ist ein Tupel. Beim Sortieren wird nm zuerst sortiert, und zwar in der Reihenfolge: amar, anil, raju, ravi. Zusammenfassend lautet das Sortierergebnis [3 1 0 2].

msort、sort_complex、partition、argpartition

FunktionBeschreibung
msort(a)Sortiert das Array entlang der ersten Achse und gibt eine sortierte Kopie des Arrays zurück. np.msort(a) ist äquivalent zu np.sort(a, axis=0).
sort_complex(a) Komplexe Zahlen sortieren: zuerst nach Realteil, dann nach Imaginärteil.
partition(a, kth[, axis, kind, order]) Geben Sie eine Zahl an, um das Array zu partitionieren
argpartition(a, kth[, axis, kind, order]) Der Algorithmus kann über das Schlüsselwort kind angegeben werden, um das Array entlang der angegebenen Achse zu partitionieren

Komplexe Sortierung:

>>> import numpy as np
>>> np.sort_complex([5, 3, 6, 2, 1])
array([ 1.+0.j,  2.+0.j,  3.+0.j,  5.+0.j,  6.+0.j])
>>>
>>> np.sort_complex([1 + 2j, 2 - 1j, 3 - 2j, 3 - 3j, 3 + 5j])
array([ 1.+2.j,  2.-1.j,  3.-3.j,  3.-2.j,  3.+5.j])

partition()-Partitionierungssortierung:

>>> a = np.array([3, 4, 2, 1])
>>> np.partition(a, 3)  # 将数组 a 中所有元素(包括重复元素)从小到大排列,3 表示的是排序数组索引为 3 的数字,比该数字小的排在该数字前面,比该数字大的排在该数字的后面
array([2, 1, 3, 4])
>>>
>>> np.partition(a, (1, 3)) # 小于 1 的在前面,大于 3 的在后面,1和3之间的在中间
array([1, 2, 3, 4])

Finde die drittkleinsten (Index=2) und zweitgrößten (Index=-2) Werte des Arrays

>>> arr = np.array([46, 57, 23, 39, 1, 10, 0, 120])
>>> arr[np.argpartition(arr, 2)[2]]
10
>>> arr[np.argpartition(arr, -2)[-2]]
57

Finde auch die 3. und 4. kleinsten Werte. Beachte, dass hier [2,3] die 3. und 4. kleinsten Werte auf einmal sortiert, auf die dann über Indizes zugegriffen werden kann

>>> arr[np.argpartition(arr, [2,3])[2]]
10
>>> arr[np.argpartition(arr, [2,3])[3]]
23

numpy.argmax() und numpy.argmin()

Die Funktionen numpy.argmax() und numpy.argmin() geben die Indizes der maximalen bzw. minimalen Elemente entlang einer gegebenen Achse zurück.

Beispiel

import numpy as np a = np.array([[30,40,70],[80,20,10],[50,90,60]]) print ('Unser Array ist:') print (a) print ('\n') print ('Aufruf der argmax()-Funktion:') print (np.argmax(a)) print ('\n') print ('Das Array abflachen:') print (a.flatten()) print ('\n') print ('Index des Maximalwerts entlang Achse 0:') maxindex = np.argmax(a, axis = 0) print (maxindex) print ('\n') print ('Index des Maximalwerts entlang Achse 1:') maxindex = np.argmax(a, axis = 1) print (maxindex) print ('\n') print ('Aufruf der Funktion argmin():') minindex = np.argmin(a) print (minindex) print ('\n') print ('Minimalwert im abgeflachten Array:') print (a.flatten()[minindex]) print ('\n') print ('Index des Minimalwerts entlang Achse 0:') minindex = np.argmin(a, axis = 0) print (minindex) print ('\n') print ('Index des Minimalwerts entlang Achse 1:') minindex = np.argmin(a, axis = 1) print (minindex)

Das Ausgabeergebnis ist:

我们的数组是:
[[30 40 70]
 [80 20 10]
 [50 90 60]]


调用 argmax() 函数:
7


展开数组:
[30 40 70 80 20 10 50 90 60]


沿轴 0 的最大值索引:
[1 2 0]


沿轴 1 的最大值索引:
[2 0 1]


调用 argmin() 函数:
5


展开数组中的最小值:
10


沿轴 0 的最小值索引:
[0 1 1]


沿轴 1 的最小值索引:
[0 2 0]

numpy.nonzero()

Die Funktion numpy.nonzero() gibt die Indizes der Nicht-Null-Elemente im Eingabe-Array zurück.

Beispiel

import numpy as np a = np.array([[30,40,0],[0,20,10],[50,0,60]]) print ('Unser Array ist:') print (a) print ('\n') print ('Aufruf der Funktion nonzero():') print (np.nonzero (a))

Das Ausgabeergebnis ist:

我们的数组是:
[[30 40  0]
 [ 0 20 10]
 [50  0 60]]


调用 nonzero() 函数:
(array([0, 0, 1, 1, 2, 2]), array([0, 1, 1, 2, 0, 2]))

numpy.where()

Die Funktion numpy.where() gibt die Indizes der Elemente im Eingabe-Array zurück, die eine gegebene Bedingung erfüllen.

Beispiel

import numpy as np x = np.arange(9.).reshape(3, 3) print ('Unser Array ist:') print (x) print ( 'Indizes der Elemente, die größer als 3 sind:') y = np.where(x > 3) print (y) print ('Verwenden Sie diese Indizes, um die Elemente zu erhalten, die die Bedingung erfüllen:') print (x[y])

Das Ausgabeergebnis ist:

我们的数组是:
[[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]]
大于 3 的元素的索引:
(array([1, 1, 2, 2, 2]), array([1, 2, 0, 1, 2]))
使用这些索引来获取满足条件的元素:
[4. 5. 6. 7. 8.]

numpy.extract()

Die Funktion numpy.extract() extrahiert Elemente aus einem Array basierend auf einer Bedingung und gibt die Elemente zurück, die die Bedingung erfüllen.

Beispiel

import numpy as np x = np.arange(9.).reshape(3, 3) print ('Unser Array ist:') print (x) # Bedingung definieren, gerade Elemente auswählen condition = np.mod(x,2) == 0 print ('Bedingungswerte pro Element:') print (condition) print ('Verwende die Bedingung, um Elemente zu extrahieren:') print (np.extract(condition, x))

Das Ausgabeergebnis ist:

我们的数组是:
[[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]]
按元素的条件值:
[[ True False  True]
 [False  True False]
 [ True False  True]]
使用条件提取元素:
[0. 2. 4. 6. 8.]
Weitere Erweiterungen