Rozdělení a třídění z numpy array

0

Otázka

>> arr = [10, 11, 4, 3, 5, 7, 9, 2, 13]
>> np.partition(np.array(arr), -3)

array([ 9,  5,  4,  3,  2,  7, 10, 11, 13])

>> np.sort(np.partition(np.array(arr), -3)[-4:])

array([ 7, 10, 11, 13])

>> np.argpartition(np.array(arr), -3)

array([6, 4, 2, 3, 7, 5, 0, 1, 8], dtype=int64)

>> np.sort(np.argpartition(np.array(arr), -3)[-4:])

array([0, 1, 5, 8], dtype=int64)

co se děje v tomto kódu? Skutečně, prošel jsem dokumentaci, ale nemohl pochopit, to číselně.

numpy python
2021-11-24 04:34:58
1

Nejlepší odpověď

0

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.

2021-11-24 07:58:35

Díky za podrobné vysvětlení, @Valdi_Bo
Arghya Biswas

Takže teď můžete přijmout moji odpověď.
Valdi_Bo

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................