Slik bruker du NumPy argmax()-funksjonen i Python

I denne opplæringen vil du lære hvordan du bruker NumPy argmax()-funksjonen for å finne indeksen til maksimumselementet i matriser.

NumPy er et kraftig bibliotek for vitenskapelig databehandling i Python; det gir N-dimensjonale arrays som er mer ytelsesdyktige enn Python-lister. En av de vanlige operasjonene du vil utføre når du arbeider med NumPy-matriser, er å finne maksimumsverdien i matrisen. Imidlertid vil du kanskje noen ganger finne indeksen der maksimumsverdien oppstår.

Argmax()-funksjonen hjelper deg med å finne indeksen til maksimum i både endimensjonale og flerdimensjonale matriser. La oss fortsette for å lære hvordan det fungerer.

Hvordan finne indeksen for maksimalt element i en NumPy-matrise

For å følge med på denne opplæringen, må du ha Python og NumPy installert. Du kan kode med ved å starte en Python REPL eller starte en Jupyter-notisbok.

Først, la oss importere NumPy under det vanlige aliaset np.

import numpy as np

Du kan bruke funksjonen NumPy max() for å få maksimalverdien i en matrise (valgfritt langs en bestemt akse).

array_1 = np.array([1,5,7,2,10,9,8,4])
print(np.max(array_1))

# Output
10

I dette tilfellet returnerer np.max(array_1) 10, som er riktig.

Anta at du vil finne indeksen der maksimumsverdien forekommer i matrisen. Du kan ta følgende to-trinns tilnærming:

  • Finn det maksimale elementet.
  • Finn indeksen til maksimumselementet.
  • I array_1 forekommer maksimalverdien på 10 ved indeks 4, etter nullindeksering. Det første elementet er ved indeks 0; det andre elementet er på indeks 1, og så videre.

    For å finne indeksen der maksimum inntreffer, kan du bruke NumPy where()-funksjonen. np.where(condition) returnerer en matrise med alle indekser der betingelsen er sann.

    Du må trykke inn i matrisen og få tilgang til elementet ved den første indeksen. For å finne hvor maksimumsverdien forekommer, setter vi betingelsen til array_1==10; husk at 10 er maksimumsverdien i array_1.

    print(int(np.where(array_1==10)[0]))
    
    # Output
    4

    Vi har brukt np.where() med kun betingelsen, men dette er ikke den anbefalte metoden for å bruke denne funksjonen.

      8 ISP proxy-tjenester å bruke akkurat nå

    📑 Merk: NumPy where() funksjon:
    np.where(betingelse,x,y) returnerer:

    – Elementer fra x når betingelsen er Sann, og
    – Elementer fra y når betingelsen er falsk.

    Ved å lenke funksjonene np.max() og np.where() kan vi derfor finne maksimumselementet, etterfulgt av indeksen der det oppstår.

    I stedet for den ovennevnte totrinnsprosessen, kan du bruke NumPy argmax()-funksjonen for å få indeksen til maksimumselementet i matrisen.

    Syntaks for NumPy argmax()-funksjonen

    Den generelle syntaksen for å bruke NumPy argmax()-funksjonen er som følger:

    np.argmax(array,axis,out)
    # we've imported numpy under the alias np

    I syntaksen ovenfor:

    • array er en hvilken som helst gyldig NumPy array.
    • akse er en valgfri parameter. Når du arbeider med flerdimensjonale matriser, kan du bruke akseparameteren til å finne indeksen for maksimum langs en bestemt akse.
    • ut er en annen valgfri parameter. Du kan sette ut-parameteren til en NumPy-matrise for å lagre utdataene fra argmax()-funksjonen.

    Merk: Fra NumPy versjon 1.22.0 er det en ekstra keepdims-parameter. Når vi spesifiserer akseparameteren i argmax() funksjonskallet, reduseres matrisen langs den aksen. Men å sette keepdims-parameteren til True sikrer at den returnerte utgangen har samme form som input-arrayen.

    Bruke NumPy argmax() for å finne indeksen til det maksimale elementet

    #1. La oss bruke funksjonen NumPy argmax() for å finne indeksen til maksimumselementet i array_1.

    array_1 = np.array([1,5,7,2,10,9,8,4])
    print(np.argmax(array_1))
    
    # Output
    4

    Argmax()-funksjonen returnerer 4, som er riktig! ✅

    #2. Hvis vi omdefinerer array_1 slik at10 forekommer to ganger, returnerer argmax()-funksjonen bare indeksen for den første forekomsten.

    array_1 = np.array([1,5,7,2,10,10,8,4])
    print(np.argmax(array_1))
    
    # Output
    4

    For resten av eksemplene bruker vi elementene i array_1 vi definerte i eksempel #1.

    Bruke NumPy argmax() for å finne indeksen til det maksimale elementet i en 2D-array

    La oss omforme NumPy-matrisen array_1 til en todimensjonal matrise med to rader og fire kolonner.

    array_2 = array_1.reshape(2,4)
    print(array_2)
    
    # Output
    [[ 1  5  7  2]
     [10  9  8  4]]

    For en todimensjonal matrise angir akse 0 radene og akse 1 angir kolonnene. NumPy-matriser følger nullindeksering. Så indeksene til radene og kolonnene for NumPy array array_2 er som følger:

    La oss nå kalle argmax()-funksjonen på den todimensjonale matrisen, array_2.

    print(np.argmax(array_2))
    
    # Output
    4

    Selv om vi kalte argmax() på den todimensjonale matrisen, returnerer den fortsatt 4. Dette er identisk med utgangen for den endimensjonale matrisen, matrise_1 fra forrige seksjon.

      Hva er Microsoft Network Adapter Multiplexor Protocol?

    Hvorfor skjer dette? 🤔

    Dette er fordi vi ikke har spesifisert noen verdi for akseparameteren. Når denne akseparameteren ikke er angitt, returnerer argmax()-funksjonen som standard indeksen til maksimumselementet langs den flate matrisen.

    Hva er en flatet matrise? Hvis det er en N-dimensjonal matrise med form d1 x d2 x … x dN, der d1, d2, opp til dN er størrelsene på matrisen langs de N dimensjonene, så er den flate matrisen en lang endimensjonal matrise med størrelse d1 * d2 * … * dN.

    For å sjekke hvordan den flattede matrisen ser ut for array_2, kan du kalle flatten()-metoden, som vist nedenfor:

    array_2.flatten()
    
    # Output
    array([ 1,  5,  7,  2, 10,  9,  8,  4])

    Indeks for maksimumselementet langs radene (akse = 0)

    La oss fortsette med å finne indeksen til det maksimale elementet langs radene (akse = 0).

    np.argmax(array_2,axis=0)
    
    # Output
    array([1, 1, 1, 1])

    Denne utgangen kan være litt vanskelig å forstå, men vi vil forstå hvordan den fungerer.

    Vi har satt akseparameteren til null (akse = 0), da vi ønsker å finne indeksen til maksimumselementet langs radene. Derfor returnerer argmax()-funksjonen radnummeret der maksimumselementet forekommer – for hver av de tre kolonnene.

    La oss visualisere dette for bedre forståelse.

    Fra diagrammet ovenfor og argmax()-utgangen har vi følgende:

    • For den første kolonnen ved indeks 0, oppstår maksimalverdien 10 i den andre raden, ved indeks = 1.
    • For den andre kolonnen ved indeks 1 forekommer maksimalverdien 9 i den andre raden, ved indeks = 1.
    • For den tredje og fjerde kolonnen ved indeks 2 og 3, forekommer maksimumsverdiene 8 og 4 begge i den andre raden, ved indeks = 1.

    Det er nettopp derfor vi har utgangsmatrisen([1, 1, 1, 1]) fordi det maksimale elementet langs radene forekommer i den andre raden (for alle kolonner).

    Indeks for maksimumselementet langs kolonnene (akse = 1)

    La oss deretter bruke argmax()-funksjonen for å finne indeksen til maksimumselementet langs kolonnene.

    Kjør følgende kodebit og observer utdataene.

    np.argmax(array_2,axis=1)
    array([2, 0])

    Kan du analysere utdataene?

    Vi har satt akse = 1 for å beregne indeksen til det maksimale elementet langs kolonnene.

    Argmax()-funksjonen returnerer, for hver rad, kolonnenummeret der maksimumsverdien forekommer.

      Hvordan ta ut til en bankkonto fra Binance

    Her er en visuell forklaring:

    Fra diagrammet ovenfor og argmax()-utgangen har vi følgende:

    • For den første raden ved indeks 0, oppstår maksimalverdien 7 i den tredje kolonnen, ved indeks = 2.
    • For den andre raden ved indeks 1 forekommer maksimalverdien 10 i den første kolonnen, ved indeks = 0.

    Jeg håper du nå forstår hva utgangen, array([2, 0]) midler.

    Bruke den valgfrie ut-parameteren i NumPy argmax()

    Du kan bruke den valgfrie ut-parameteren i NumPy argmax()-funksjonen for å lagre utdataene i en NumPy-matrise.

    La oss initialisere en matrise med nuller for å lagre utdata fra forrige argmax() funksjonskall – for å finne indeksen til maksimum langs kolonnene (akse= 1).

    out_arr = np.zeros((2,))
    print(out_arr)
    [0. 0.]

    La oss nå se på eksemplet med å finne indeksen til det maksimale elementet langs kolonnene (akse = 1) og sette ut til out_arr vi har definert ovenfor.

    np.argmax(array_2,axis=1,out=out_arr)

    Vi ser at Python-tolken kaster en TypeError, ettersom out_arr ble initialisert til en rekke flytere som standard.

    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    /usr/local/lib/python3.7/dist-packages/numpy/core/fromnumeric.py in _wrapfunc(obj, method, *args, **kwds)
         56     try:
    ---> 57         return bound(*args, **kwds)
         58     except TypeError:
    
    TypeError: Cannot cast array data from dtype('float64') to dtype('int64') according to the rule 'safe'

    Derfor, når du setter ut-parameteren til utmatrisen, er det viktig å sikre at utmatrisen er av riktig form og datatype. Siden matriseindekser alltid er heltall, bør vi sette parameteren dtype til int når vi definerer utmatrisen.

    out_arr = np.zeros((2,),dtype=int)
    print(out_arr)
    
    # Output
    [0 0]

    Vi kan nå gå videre og kalle argmax()-funksjonen med både akse- og ut-parametere, og denne gangen kjører den uten feil.

    np.argmax(array_2,axis=1,out=out_arr)

    Utdataene fra argmax()-funksjonen kan nå nås i matrisen out_arr.

    print(out_arr)
    # Output
    [2 0]

    Konklusjon

    Jeg håper denne opplæringen hjalp deg med å forstå hvordan du bruker NumPy argmax()-funksjonen. Du kan kjøre kodeeksemplene i en Jupyter-notisbok.

    La oss gå gjennom det vi har lært.

    • Funksjonen NumPy argmax() returnerer indeksen til maksimumselementet i en matrise. Hvis maksimumselementet forekommer mer enn én gang i en matrise a, returnerer np.argmax(a) indeksen for den første forekomsten av elementet.
    • Når du arbeider med flerdimensjonale matriser, kan du bruke den valgfrie akseparameteren for å få indeksen til det maksimale elementet langs en bestemt akse. For eksempel, i en todimensjonal matrise: ved å sette akse = 0 og akse = 1, kan du få indeksen til det maksimale elementet langs henholdsvis radene og kolonnene.
    • Hvis du vil lagre den returnerte verdien i en annen matrise, kan du sette den valgfrie ut-parameteren til utmatrisen. Utdatamatrisen bør imidlertid være av kompatibel form og datatype.

    Deretter kan du sjekke ut den grundige veiledningen om Python-sett.