# Kaj je np.where v Pythonu?

Za delo z NumPy-jevimi matrikami v Pythonu lahko uporabite funkcijo `np.where()`. Njene vektorske operacije so učinkovitejš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 **izpolnjujejo 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, znanstveni izračuni, strojno učenje in analiza podatkov. Pri obdelavi podatkov `np.where()` omogoča **filtriranje podatkov** in zamenjavo vrednosti v nizih.

## Kakšna je sintaksa np.where v Pythonu?

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

```python
import numpy as np
np.where(condition[, x, y])
```

- `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 nasprotnem primeru se vrnejo vrednosti iz `y`. Če ne določite `x` in `y`, bo `np.where()` vrnil indekse, ki izpolnjujejo pogoj.

Po izvedbi `np.where()` vrne **novi NumPy niz**. Novi niz je rezultat filtriranja ali izbire elementov iz izvirnega niza na podlagi pogoja.

## Primeri uporabe np.where

Metoda `np.where()` je vsestransko orodje za uporabo pogojev v nizih in je zelo uporabna za manipulacijo podatkov. V nadaljevanju si bomo ogledali nekaj primerov, kako jo uporabiti.

### Zamenjajte elemente v NumPy nizu

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

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

Sedaj, ko imamo naš niz, želimo definirati pogoj za identifikacijo 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 nasprotnem primeru:

```python
condition = arr > 3
```

Nato bomo uporabili `np.where()` in vnesli ta pogoj. Določili bomo tudi, da bodo vrednosti, ki izpolnjujejo pogoj, nadomeščene z -1, vse druge vrednosti pa z 0.

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

Rezultat, `new_arr`, vsebuje niz, ki je bil spremenjen na podlagi pogoja. V izhodu so vrednosti, ki so večje od 3, nadomeščene z -1. Vse druge vrednosti so nadomeščene z 0.

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

### Uporabite np.where z enim pogojem

Če uporabite `np.where()` z enim samim pogojem in brez nadomestnih vrednosti, bo vrnil **niz indeksov**, za katere je pogoj resničen.

```python
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]),)
```

V tem primeru je `arr` NumPy niz, ki vsebuje vrednosti od 1 do 5. `condition = arr > 2` ustvari booleansko masko, ki identificira elemente v `arr`, ki so večji od 2. `np.where(condition)` se izvede brez nadomestnih vrednosti in kot rezultat vrne niz indeksov, ki izpolnjujejo 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 oblikovanimi nizi, če so izpolnjeni določeni pogoji. Kadar imajo nizi različne oblike, bo NumPy poskušal jih povečati, da bodo združljivi.

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

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

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

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

Oblike obeh nizov se ne ujemajo povsem, vendar je mogoče z oddajanjem omogočiti operacije med njima. Če bi na primer želeli sešteti vrednosti iz vsake vrstice `arr` z vrednostmi v `row`, bi to omogočilo oddajanje.

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

V zgornjem primeru je bil enodimenzionalni 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.


This is a markdown version of: [https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/metoda-python-npwhere/](https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/metoda-python-npwhere/) for AI/LLM consumption.