np.argmax() în NumPy

Returnează poziția (indicele) valorii maxime sau minime, nu valoarea; np.unravel_index transformă indicele în rând și coloană.

Sintaxă
np.argmax(a, axis=None, keepdims=False)
np.argmin(a, axis=None, keepdims=False)
np.unravel_index(indici, forma)

Ce face np.argmax()

np.argmax() returnează indicele elementului maxim, iar np.argmin() indicele elementului minim. Dacă maximul apare de mai multe ori, se returnează prima poziție. Indicele îl poți folosi apoi pentru a afla, de exemplu, numele lunii sau al orașului dintr-o altă listă.

Pe un tablou 2D fără axis, indicele se calculează pe tabloul aplatizat (rând după rând). Ca să obții rândul și coloana, dă indicele lui np.unravel_index(indice, a.shape). Cu axis=1 primești poziția maximului pe fiecare rând, cu axis=0 pe fiecare coloană.

Parametri

Parametru Descriere
a Tabloul.
axis Axa pe care se caută; None = tabloul aplatizat.
keepdims Păstrează axa cu lungimea 1 (NumPy 1.22+).
indici, forma La np.unravel_index: indicele „plat” și forma tabloului.

Ce returnează

argmax/argmin: un întreg (np.int64) sau un tablou de indici. unravel_index: un tuplu de indici, câte unul pe axă.

Exemple

Exemplul 1: Luna cu cele mai mari vânzări

Valoarea 1600 apare în martie și în mai; argmax returnează prima poziție.

import numpy as np

luni = ["ian", "feb", "mar", "apr", "mai"]
vanzari = np.array([1200, 950, 1600, 1100, 1600])

i_max = np.argmax(vanzari)
i_min = np.argmin(vanzari)
print("Maxim în", luni[i_max], "cu", vanzari[i_max], "lei")
print("Minim în", luni[i_min], "cu", vanzari[i_min], "lei")

Rezultat

Maxim în mar cu 1600 lei
Minim în feb cu 950 lei

Exemplul 2: Poziția pe fiecare rând

Pentru fiecare elev, indicele materiei la care are nota cea mai mare.

import numpy as np

materii = np.array(["mate", "română", "info"])
note = np.array([
    [9, 8, 10],   # Ana
    [6, 9, 5],    # Mihai
    [10, 7, 8],   # Ioana
])
pozitii = np.argmax(note, axis=1)
print(pozitii)
print(materii[pozitii])

Rezultat

[2 1 0]
['info' 'română' 'mate']

Exemplul 3: Rândul și coloana maximului cu unravel_index

import numpy as np

orase = ["Iași", "Cluj", "Brașov"]
temp = np.array([
    [3, 7, 5],
    [1, 4, 12],
    [8, 9, 6],
])
plat = np.argmax(temp)
rand, coloana = np.unravel_index(plat, temp.shape)
print("Indice plat:", plat)
print(f"Maxim {temp[rand, coloana]} grade în {orase[rand]}, ziua {coloana + 1}")

Rezultat

Indice plat: 5
Maxim 12 grade în Cluj, ziua 3

Greșeli frecvente

  • Aștepți valoarea maximă și primești poziția ei. Pentru valoare folosește np.max(), sau a[np.argmax(a)].
  • Folosești direct rezultatul lui np.argmax() pe un tablou 2D ca indice de rând: el este un indice pe tabloul aplatizat. Treci prin np.unravel_index().
  • Pe date cu np.nan, np.argmax() returnează poziția primului nan. Folosește np.nanargmax().

Comenzi înrudite

  • np.min() și np.max(): Găsește valoarea minimă și maximă (np.min, np.max), diferența dintre ele (np.ptp) și maximul element cu element (np.maximum).
  • np.argsort(): Returnează indicii care ar sorta tabloul; așa sortezi un tablou după altul, de exemplu numele după note.
  • np.where(): Cu trei argumente alege valori după o condiție (dacă-altfel pe tablouri); cu un argument returnează pozițiile unde condiția e adevărată.
  • Indexare și slicing: Accesează un element, o bucată, un rând sau o coloană dintr-un tablou NumPy cu paranteze pătrate.