Je to špatná praxe, které jste jmenoval prostý, pythonic seznam jako arr.
Pro teď je to jen seznam a pole bude vytvořen další.
Lépe pochopit, co se děje, je vhodné rozdělit kód
do kroků a uložit každý dílčí výsledek v rámci samostatné proměnné.
To je, jak mám přepsat svůj kód.
Takže pojďme začít od:
lst = [10, 11, 4, 3, 5, 7, 9, 2, 13]
Druhým krokem je vytvoření pole z tohoto seznamu:
arr1 = np.array(lst)
Rozhodl jsem se název této (a následující pole) jako "paříž" s po sobě jdoucími čísly.
Třetím krokem je rozdělení arr1, umístění "práh" prvek na
na třetí pozici od konce:
arr2 = np.partition(arr1, -3)
Výsledek je:
array([ 9, 5, 4, 3, 2, 7, 10, 11, 13])
Podrobnosti:
- "Práh" prvek (10) se nachází na třetí pozici od konce.
- Všechny předcházející prvky jsou menší než prahová hodnota.
- Všechny tyto prvky jsou větší nebo se rovnat prahové hodnotě.
- Nic nemůže být řekl, o pořadí prvků, a to jak před a po
"prahovou hodnotou" prvku.
Pak se budete chtít dostat poslední 4 prvky arr2:
arr3 = arr2[-4:]
Žádné překvapení, výsledek je:
array([ 7, 10, 11, 13])
Dalším krokem je, aby třídit je:
arr4 = np.sort(arr3)
Tentokrát se nic nezměnilo, obsah arr4 je to stejné, jako arr3.
Zatím jste skončil své experimenty s oddíl, druhá část je
experiment s argpartition:
arr5 = np.argpartition(arr1, -3)
Výsledek je:
array([6, 4, 2, 3, 7, 5, 0, 1, 8], dtype=int64)
To je pole indexů do arr1.
Podrobnosti:
- Třetí prvek od konce (0) je index "práh"
prvek v arr1 (jeho hodnota je 10).
- Všechny předchozí prvky jsou indexy z menších prvků (v arr1).
- Všechny tyto prvky jsou indexy vyšší nebo rovné prvky (v arr1).
Pak dostanete poslední 4 prvky arr5:
arr6 = arr5[-4:]
získání:
array([5, 0, 1, 8], dtype=int64)
A posledním krokem je, aby třídit je:
arr7 = np.sort(arr6)
získání (žádné překvapení):
array([0, 1, 5, 8], dtype=int64)
To je vše.