Za delo z NumPy-jevimi matrikami v Pythonu lahko uporabite funkcijo np.where(). Njene vektorske operacije so učin­ko­vi­tej­še od metod, ki temeljijo na zankah.

Kaj počne np.where?

Pythonova funkcija np.where() je zmogljiva metoda iz knjižnice NumPy, ki se uporablja za izbiranje elementov iz niza. Prepozna in izloči elemente, ki iz­pol­nju­je­jo določen pogoj, nato pa vrne indekse ali vrednosti, ki ustrezajo temu pogoju.

Funkcija se uporablja na različnih področjih, kot so obdelava podatkov, znan­stve­ni izračuni, strojno učenje in analiza podatkov. Pri obdelavi podatkov np.where() omogoča fil­tri­ra­nje podatkov in zamenjavo vrednosti v nizih.

Kakšna je sintaksa np.where v Pythonu?

Funkcija np.where() sprejme niz, podoben NumPy, ki je se­sta­vljen na primer iz celih števil ali logičnih vrednosti. Njena sintaksa je naslednja:

import numpy as np
np.where(condition[, x, y])
python
  • condition: To je pogoj, ki se bo uporabil za niz, da se določi, kateri elementi bodo izbrani.
  • x in y (neobvezno): Če določite x in y, se bodo vrednosti iz x vrnile, ko bo pogoj izpolnjen. V na­spro­tnem primeru se vrnejo vrednosti iz y. Če ne določite x in y, bo np.where() vrnil indekse, ki iz­pol­nju­je­jo pogoj.

Po izvedbi np.where() vrne novi NumPy niz. Novi niz je rezultat fil­tri­ra­nja ali izbire elementov iz izvirnega niza na podlagi pogoja.

Primeri uporabe np.where

Metoda np.where() je vse­stran­sko orodje za uporabo pogojev v nizih in je zelo uporabna za ma­ni­pu­la­ci­jo podatkov. V na­da­lje­va­nju si bomo ogledali nekaj primerov, kako jo uporabiti.

Za­me­njaj­te elemente v NumPy nizu

Funkcija np.where() v NumPy omogoča zamenjavo elementov v nizu na podlagi pogoja. Preden začnete, lahko sezname Python spre­me­ni­te v nize z uporabo np.array().

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

Sedaj, ko imamo naš niz, želimo de­fi­ni­ra­ti pogoj za iden­ti­fi­ka­ci­jo elementov, ki so večji od 3. To lahko storimo s pogojem, ki je True za elemente, ki so večji od 3, in sicer v na­spro­tnem primeru:

condition = arr > 3
python

Nato bomo uporabili np.where() in vnesli ta pogoj. Določili bomo tudi, da bodo vrednosti, ki iz­pol­nju­je­jo pogoj, na­do­me­šče­ne z -1, vse druge vrednosti pa z 0.

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

Rezultat, new_arr, vsebuje niz, ki je bil spre­me­njen na podlagi pogoja. V izhodu so vrednosti, ki so večje od 3, na­do­me­šče­ne z -1. Vse druge vrednosti so na­do­me­šče­ne z 0.

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

Uporabite np.where z enim pogojem

Če uporabite np.where() z enim samim pogojem in brez na­do­me­stnih vrednosti, bo vrnil niz indeksov, za katere je pogoj resničen.

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

V tem primeru je arr NumPy niz, ki vsebuje vrednosti od 1 do 5. condition = arr > 2 ustvari boo­le­an­sko masko, ki iden­ti­fi­ci­ra elemente v arr, ki so večji od 2. np.where(condition) se izvede brez na­do­me­stnih vrednosti in kot rezultat vrne niz indeksov, ki iz­pol­nju­je­jo pogoj arr > 2. Izhod je niz indeksov, v katerem so elementi večji od 2.

Oddaja z np.where

V NumPyju oddajanje omogoča izvajanje operacij z različno obli­ko­va­ni­mi nizi, če so iz­pol­nje­ni določeni pogoji. Kadar imajo nizi različne oblike, bo NumPy poskušal jih povečati, da bodo zdru­žlji­vi.

Recimo, da imamo NumPy matriko arr v obliki (3, 3):

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

In imamo še en NumPy niz row v obliki (3,):

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

Oblike obeh nizov se ne ujemajo povsem, vendar je mogoče z od­da­ja­njem omogočiti operacije med njima. Če bi na primer želeli sešteti vrednosti iz vsake vrstice arr z vre­dnost­mi v row, bi to omogočilo oddajanje.

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

V zgornjem primeru je bil eno­di­men­zi­o­nal­ni niz row povečan v matriko (3, 3), da se je ujemal z obliko arr. Nato so bili elementi arr in row sešteti element za elementom.

Go to Main Menu