Imejmo tabelo
import numpy as np
= np.array([5, 8, 3, 1, 10, 5]) a
Pripravimo "masko": tabelo, ki je enako dolga kot a
in
vsebuje bool
-e.
= np.array([True, True, True, False, False, True]) m
Z masko m
lahko izbiramo elemente a
, tako
da uporabimo m
kot indeks.
a[m]
array([5, 8, 3, 5])
To nam vrne tiste elemente a
-ja, pri katerih je
istoležni element m
-ja enak True
.
To je zelo koristna reč. Tako lahko, recimo, dobimo vse elemente
a
, ki so večji od 5. Pripravimo primerno masko
= a > 5
m
m
array([False, True, False, False, True, False])
in jo uporabimo:
a[m]
array([ 8, 10])
To seveda navadno naredimo brez posebne spremenljivke, napišemo lahko kar:
> 5] a[a
array([ 8, 10])
Recimo, da imamo
= np.array([[5, 8, 7, 1, 3],
a 2, 5, 1, 1, 4],
[7, 6, 1, 9, 2]]) [
Kako bi dobili vse vrstice tabele, ki v stolpcu 1 vsebujejo število manjše od 7?
Zanima nas drugi stolpec (in to vse vrstice tega stolpca), torej
1] a[:,
array([8, 5, 6])
Konkretno, vedeti hočemo, ali je tam število, ki je manjše od 7.
1] < 7 a[:,
array([False, True, True])
In to bomo uporabili za izbor vrstic:
1] < 7] a[a[:,
array([[2, 5, 1, 1, 4],
[7, 6, 1, 9, 2]])
Nekaj podobnega boste delali ob reševanju naloge.
Tu pa si oglejmo še nekaj malo bolj zapletenega. Hočemo vrstice, katerih vsota je večja od 20. Vsote vrstic dobimo z
sum(a, axis=1) np.
array([24, 13, 25])
Zanimajo nas vsote, večje od 20, torej
sum(a, axis=1) > 20 np.
array([ True, False, True])
Vidimo, prva in tretja vrstica. Torej
sum(a, axis=1) > 20] a[np.
array([[5, 8, 7, 1, 3],
[7, 6, 1, 9, 2]])
Kaj pa stolpci, katerih vsota je večja od deset?
sum(a, axis=0) > 10] a[:, np.
array([[5, 8, 1],
[2, 5, 1],
[7, 6, 9]])
Ne spreglejte: np.sum(a, axis=1)
je potrebno uporabiti
kot drugi indeks. Prvi indeks pa je :
, saj želimo vse
vrstice; izbir(č)ni smo le glede stolpcev.
Zdaj znamo dovolj, da učinkovito rešimo še drugi del tretje naloge Binary Diagnostic. Tu žal ne bo šlo tako, da bi računali za vse stolpce hkrati. Potrebno bo narediti zanko, s katero bomo šli prek stolpcev in izbirali vrstice, ki ustrezajo kriteriju, dokler ne ostane ena sama vrstica.