8  Numpy

Gradivi za to poglavje sta:

Povezave in osnovna navodila za namestitev knjižnice numpy na domači računalnik so v Poglavje 1.3 .

Vizualna reprecentacija operacij z Numpy seznami: http://jalammar.github.io/visual-numpy/

Ustvarjanje tabel

Navaden seznam pretvorimo v Numpy seznam s funkcijo np.array(seznam).

import numpy as np

a = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(a)
print(a.shape)
print(a.ndim)
print(a.size)
[[1 2 3 4]
 [5 6 7 8]]
(2, 4)
2
8

Sezname lahko združimo z np.concatenate(sez1, sez2), ki vrne staknjen seznam. To je počasna operacija, zato je raje ne uporabljajmo.

Če je le mogoče vnaprej ustvarimo nov seznam znane dolžine z eno od spodnjih metod:

  • np.zeros(oblika) parameter oblika je nabor celih števil, ki predstavlja obliko tabele npr. (3, 2) ustvari tabelo z tremi vrsticami in dvema stolpcema
  • np.ones(oblika)
  • np.linspace(zacetek, konec, num) vrne enakomerno razporejena števila na intervalu
  • np.arange(zacetek, konec, korak) vrne števila ločena za korak (če ni podan, je 1)
  • np.fromfunction(ime_funkcije, oblika)
  • seznam.reshape(oblika) spremeni obliko seznama
print(np.zeros((3, 2))) # tri vrstice, dva stolpca
[[0. 0.]
 [0. 0.]
 [0. 0.]]

Rezine

Do elementov tabel dostopamo podobno kot pri običajnih seznamih (zacetek:konec:korak), le da to naredimo za vsako dimenzijo posebej ločeno z vejicami.

tabela = np.arange(0, 49).reshape(7, 7)
print(tabela)

razrezano = tabela[0:4,2:7:2] # prve štiri vrstice, vsak drugi stolpec od tretjega do sedmega
print(razrezano)
[[ 0  1  2  3  4  5  6]
 [ 7  8  9 10 11 12 13]
 [14 15 16 17 18 19 20]
 [21 22 23 24 25 26 27]
 [28 29 30 31 32 33 34]
 [35 36 37 38 39 40 41]
 [42 43 44 45 46 47 48]]
[[ 2  4  6]
 [ 9 11 13]
 [16 18 20]
 [23 25 27]]

Če želimo vse elemente v neki dimenziji napišemo :. Tako lahko dobimo posamezne stolpce.

print(tabela[:,3]) # četrti stolpec
[ 3 10 17 24 31 38 45]

Ko imamo enkrat izbrane želene vrstice in stolpce, lahko te vrednosti shranimo v spremenljivko (kot je to zgoraj pri razrezano). Lahko pa pa na ta izbrana mesta v tabeli shranimo neke druge vrednosti. Shranjujemo lahko tudi cele tabele naenkrat:

minitabela = np.arange(100, 112).reshape(4,3)
print(minitabela)

tabela[0:4,2:7:2] = minitabela # na izbrana mesta shranimo vrednosti iz minitabela
print(tabela)
[[100 101 102]
 [103 104 105]
 [106 107 108]
 [109 110 111]]
[[  0   1 100   3 101   5 102]
 [  7   8 103  10 104  12 105]
 [ 14  15 106  17 107  19 108]
 [ 21  22 109  24 110  26 111]
 [ 28  29  30  31  32  33  34]
 [ 35  36  37  38  39  40  41]
 [ 42  43  44  45  46  47  48]]

Uporabne funkcije

Glej predvsem uradno dokumentacijo: https://numpy.org/doc/stable/reference/routines.sort.html
Vsaka funkcija ima opis parametrov in zelo nazorne primere uporabe.

Pri mnogih funkcijah lahko podamo neobvezni parameter axis=x, kjer je x številka osi, po kateri želimo operacijo izvesti (0, 1, 2, …).

Pozor

Vrednost True se obnaša kot 1 in False se obnaša kot 0 ter obratno.

  • np.any(tabela) vrne True, če je vsaj en element True
  • np.all(tabela) vrne True, če so vsi elementi True
  • np.nonzero(tabela) vrne indekse neničelnih elementov v vsaki dimenziji posebej (koordinate teh elementov)
  • np.flatten(tabela) vrne “flat” obliko tabele (enodimenzionalni seznam zaporednih elementov)
  • np.flatnonzero(tabela) vrne indekse neničelnih elementov v “flat” obliki tabele (zaporedni indeks)
  • np.where(pogoj, x, y) vrne elemente iz x, kjer je pogoj izpolnjen, sicer vrne ustrezni element iz y; pogoj se ovrednoti za vsak element posebej; glej primere v dokumentaciji!
  • tabela.T vrne transponiramo tabelo (to pomeni, da so elementi zrcaljeni preko diagonale); deluje tudi za nekvadratne tabele
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
print(a.T)
[[1 2 3]
 [4 5 6]]
[[1 4]
 [2 5]
 [3 6]]

Matematika

Dokumentacija: https://numpy.org/doc/stable/reference/routines.math.html

  • np.abs(tabela)
  • np.sum(tabela)
  • np.cumsum(tabela)
  • np.prod(tabela)
  • np.log(tabela)
  • np.exp(tabela)
  • np.sin(tabela)
  • itd.