Du kan bruge funk­tio­nen np.where() til at arbejde med NumPy-arrays i Python. Dens vek­to­ri­se­re­de ope­ra­tio­ner gør den mere effektiv end loop-baserede metoder.

Hvad gør np.where?

Python-funk­tio­nen np.where() er en kraftfuld metode fra NumPy-bi­bli­o­te­ket og bruges til at vælge elementer fra en matrix. Den iden­ti­fi­ce­rer og udtrækker elementer, der opfylder en bestemt be­tin­gel­se, og re­tur­ne­rer derefter indekser eller værdier, der svarer til denne be­tin­gel­se.

Funk­tio­nen bruges inden for en række for­skel­li­ge områder, såsom da­ta­be­hand­ling, vi­den­ska­be­li­ge be­reg­nin­ger, ma­skin­læ­ring og da­ta­a­na­ly­se. I da­ta­be­hand­ling gør np.where() det muligt at filtrere data og erstatte værdier i arrays.

Hvad er syntaksen for np.where i Python?

Funk­tio­nen np.where() tager en NumPy-lignende matrix, der består af for eksempel heltal eller boolske værdier. Dens syntaks ser således ud:

import numpy as np
np.where(condition[, x, y])
python
  • condition: Dette er den be­tin­gel­se, der vil blive anvendt på arrayet for at bestemme, hvilke elementer der skal vælges.
  • x og y (valgfrit): Hvis du angiver x og y, re­tur­ne­res værdierne fra x, når be­tin­gel­sen er opfyldt. Ellers re­tur­ne­res værdierne fra y. Hvis du ikke angiver x og y, re­tur­ne­rer np.where() de indekser, der opfylder be­tin­gel­sen.

Efter udførelse re­tur­ne­rer np.where() en ny NumPy-matrix. Den nye matrix er re­sul­ta­tet af fil­tre­ring eller ud­væl­gel­se af elementer fra den op­rin­de­li­ge matrix baseret på be­tin­gel­sen.

Eksempler på brug af np.where

np.where() er et alsidigt værktøj til at anvende be­tin­gel­ser på arrays og er meget nyttigt til da­ta­be­hand­ling. Nedenfor ser vi på nogle eksempler på, hvordan man bruger det.

Erstat elementer i en NumPy-matrix

Funk­tio­nen np.where() i NumPy gør det muligt at erstatte elementer i en matrix baseret på en be­tin­gel­se. Inden du går i gang, kan du ændre Python-lister til matricer ved hjælp af np.array().

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
python

Nu hvor vi har vores array, vil vi definere en be­tin­gel­se for at iden­ti­fi­ce­re elementer, der er større end 3. Det kan vi gøre med en be­tin­gel­se, der er True for elementer, der er større end 3, og ellers falsk:

condition = arr > 3
python

Dernæst bruger vi np.where() og indtaster denne be­tin­gel­se. Vi fastslår også, at værdier, der opfylder be­tin­gel­sen, erstattes med -1, og alle andre værdier erstattes med 0.

new_arr = np.where(condition, -1, 0)
python

Re­sul­ta­tet, new_arr, in­de­hol­der den matrix, der er blevet ændret på baggrund af be­tin­gel­sen. I outputtet erstattes værdier, der er større end 3, med -1. Alle andre værdier erstattes med 0.

print(new_arr)
# Output: [0 0 0 -1 -1]
python

Brug np.where med en enkelt be­tin­gel­se

Hvis du bruger np.where() med kun én be­tin­gel­se og uden er­stat­nings­vær­di­er, re­tur­ne­res en tuple med indekser, som be­tin­gel­sen er sand for.

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
condition = arr > 2
result = np.where(condition)
print(result)
# Output: (array([2, 3, 4]),)
python

I dette eksempel er arr en NumPy-matrix, der in­de­hol­der værdier fra 1 til 5. condition = arr > 2 opretter en boolsk maske, der iden­ti­fi­ce­rer elementer i arr, der er større end 2. np.where(condition) udføres uden er­stat­nings­vær­di­er og re­tur­ne­rer derfor en tuple af indekser, der opfylder be­tin­gel­sen arr > 2. Outputtet er en matrix af indekser, hvor ele­men­ter­ne er større end 2.

Broadcast med np.where

I NumPy gør bro­adca­sting det muligt at udføre ope­ra­tio­ner med arrays i for­skel­li­ge former, forudsat at visse be­tin­gel­ser er opfyldt. Når arrays har for­skel­li­ge former, vil NumPy forsøge at forstørre dem, så de bliver kom­pa­tib­le.

Lad os sige, at vi har en NumPy-matrix arr med formen (3, 3):

import numpy as np
arr = np.array([[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]])
python

Og vi har en anden NumPy-matrix row med formen (3,):

row = np.array([10, 11, 12])
python

De to arrays’ former passer ikke helt sammen, men bro­adca­sting kan bruges til at muliggøre ope­ra­tio­ner mellem dem. Hvis vi f.eks. ønskede at lægge værdierne fra hver række i arr sammen med værdierne i row, ville bro­adca­sting gøre det muligt.

result = arr + row
print(result)
# Output: [[11 13 15]
    [14 16 18]
    [17 19 21]]
python

I eksemplet ovenfor blev den en­di­men­sio­nel­le matrix row udvidet til en (3, 3) matrix for at matche formen af arr. Derefter blev ele­men­ter­ne i arr og row lagt sammen element for element.

Gå til ho­ved­me­nu­en