Ich möchte den Rang der Python-Listenwerte in aufsteigender / absteigender Reihenfolge erhalten. Ich fand die aufsteigende Reihenfolge, sobald ich sie nachgeschlagen hatte, aber ich ließ sie als Notiz, weil die absteigende Reihenfolge etwas Einfallsreichtum erforderte.
Es ist sofort ein Code.
from scipy.stats import rankdata
# Zieldaten
array = [10,30,30,40,20]
# Holen Sie sich den Rang für jeden Index mit Rangdaten
asc = rankdata(array)
# Anzeige in aufsteigender Reihenfolge
print(type(asc))
print(asc.astype(float))
# Absteigende Berechnung
desc = (len(asc) - asc + 1).astype(float)
# Anzeige in absteigender Reihenfolge
print(type(desc))
print(desc)
Es scheint, dass der Prozess des Erfassens in absteigender Reihenfolge nicht in Rangdaten implementiert ist, daher war es notwendig, die absteigende Reihenfolge zu berechnen. Durch das Ausprobieren verschiedener Dinge denke ich, dass dies am einfachsten zu sein scheint.
Unten sind die Ausführungsergebnisse.
<class 'numpy.ndarray'>
[1. 3. 5. 4. 2.]
<class 'numpy.ndarray'>
[5. 3. 1. 2. 4.]
Wenn Sie Astype in Astype ändern (int)
<class 'numpy.ndarray'>
[1 3 5 4 2]
<class 'numpy.ndarray'>
[5 3 1 2 4]
Es wird so sein.
Wenn in diesem Zustand der gleiche Wert eingegeben wird ...
# Zieldaten
array = [10,30,30,40,20]
<class 'numpy.ndarray'>
[1 3 3 5 2]
<class 'numpy.ndarray'>
[5 2 2 1 4]
Es wird so sein. Das Ergebnis hat sich geändert. Wenn es schwimmt bleibt
<class 'numpy.ndarray'>
[1. 3.5 3.5 5. 2. ]
<class 'numpy.ndarray'>
[5. 2.5 2.5 1. 4. ]
Es wird so sein.
Wenn die Daten nicht abgedeckt sind, handelt es sich um eine eingeschränkte Methode.
Die von Konandoirusa aufgezeigte Methode ist überwältigend einfacher, deshalb habe ich sie hinzugefügt.
import numpy as np
from scipy.stats import rankdata
# Zieldaten
array = [10,30,30,40,20]
# aufsteigende Reihenfolge
print(rankdata(np.array(array)))
# absteigende Reihenfolge
print(rankdata(-np.array(array)))
Ausführungsergebnis
[1. 3.5 3.5 5. 2. ]
[5. 2.5 2.5 1. 4. ]