NumPy

NumPy er ein pakke for vitenskapelig databehandling for Python, som mellom anna inneheld arrays, som eg skal ta for meg her. Det fins også eit bibliotek som heiter array, men denne lenka seier at det er betre med numpy arrays.

Numpy-arrays

Kva er egentlig eit "array"?

Hvis du søkjer på ordet array i programmering, eller les lærebøker i programmering, kan du treffa på definisjonar som er akkurat slik vi har definert lister. Men når eg snakkar om arrays her, er det altså numpy-arrays det handlar om, så derfor sløyfer eg "numpy-". Forskjellen på lister og arrays er kva du kan gjera med dei, og at ein del operasjonar, som "+",  har ulik betydning. Sjå nedanfor. Den vanlige måten å importera numpy er å skriva

import numpy as np

Når vi bruker metodar frå numpy må vi då bruka "fornavnet" np før alle funksjonsnavna. Sjå eksempel nedanfor.

Initialisering

Nyttige funksjonar / kommandoar for å initialisera (gi startverdiar) til eit array:

np.zeros() initialiserer eit array med nullar. Eksempel: np.zeros(3) gir arrayet  [0., 0., 0.]

np.ones.() initialiserer eit array med einarar. Eksempel: np.ones(3) gir arrayet  [1., 1., 1.]

np.repeat() initialiserer eit array med eit visst antal av same tal. Eksempel: np. repeat(3,5) gir arrayet [3, 3, 3, 3, 3]

np.linspace() gir eit array med tall frå og med ein gitt verdi til og med ein gitt verdi spredd jevnt med eit gitt antal verdiar. Eksempel: np.linspace(-3.0,3.0,num = 6) gir arrayet [-3.  -1.8 -0.6  0.6  1.8  3.]

np.arange() gir eit array frå og med ein gitt verdi til (men ikkje med) ein gitt verdi, og med gitt mellomrom. Eksempel: np.arange(-2.0,2.0, 0.5) gir arrayet [-2.  -1.5 -1.  -0.5  0.   0.5  1.   1.5]

np.random.random(5) gir eit array med fem tilfeldige tal. Les også Random og Random, fru Blom.

Operasjonar med arrays

Vanlige Python-lister og arrays liknar på kvarandre, men skil seg som sagt ved ka du kan gjera med dei. Dette kan vi sjå hvis vi definerer to lister og to arrays og ser ka som skjer når vi summerer og når vi multipliserer med eit tal. Så vi har listene  a = [1, 2, 3] og b = [1, -2, 0] og dei same som arrays: c = np.array([1, 2, 3]), og d = np.array([1, -2, 0])

Eksempel 1, summering: a + b gir  [1, 2, 3, 1, -2, 0], mens c + d gir array([2, 0, 3]).
Ein sum av to lister slår altså dei to listene saman (konkatenerer) til ei lengre liste, mens summen av to arrays, gir summen element for element.

Eksempel 2, multiplikasjon med eit tal: 2*a gir [1, 2, 3, 1, 2, 3], mens 2*c gir array([2, 4, 6]). Dette kunne vi har gjetta, sidan 2*a gir det same som a + a, og tilsvarande for c.

Arrays som vektorar

Eksempela viser at arrays oppfører seg som vektorar med disse to operasjonane. Her er ein oppsummering av dette. Å tegna ein vektor med Matplotlib er litt omstendelig.

Vektoraddisjon og subtraksjon

Når a og b er arrays, kan vi enkelt utføra vektoraddisjon eller vektorsubtraksjon ved å skriva: a + b eller a -  b

Men vi kan også gjera det same med np.add(a,b) og np.subtract(a-b). Og då treng faktisk ikkje a og b vera arrays. Det funkar også med lister.

Multiplikasjon og divisjon med tal

Vi kan altså multiplisera eit array a med 2 ved å skriva 2*a og vi kan dividera ved å skriva a/2, slik vi ville gjort med vektorar

Funksjonen av eit array

Hvis vi definerer funksjonen f(x) som:

def f(x):
    return 3*x +1

så kan vi bruka denne på eit array a gitt som x = array([1, 2, 3]):

f(x) gir array([ 4,  7, 10])

Lengden av ein vektor

np.linalg.norm() gir oss (mellom anna) lengden av ein vektor:

np.linalg.norm([3,4]) gir 5.0

Skalarprodukt og vektorprodukt.

numpy.dot gir oss skalarproduktet av x og y:

x = [1, 2, 3]
y = [4, 5, 6]

np.dot(x,y) gir 32 (fordi 1*4 + 2*4 + 3*6)
Hvis a er definert som eit array, kan dette også gjerast ved å skriva x.dot(y)

numpy.cross() gir oss vektorproduktet (kryssproduktet) av to vektorar
np.cross(x, y) gir array([-3,  6, -3])

Plotting med arrays

Hvis du har eit array med x-verdiar, kan du enkelt laga eit array med y-verdiar ved hjelp av operatorane over, (og gjerne ein funksjon) og deretter plotta grafen.

Sjå: Graftegning med Matplotlib.

Lesa frå, og skriva data til ei tekstfil

Det fins mange måtar å lesa frå og skriva til filer. Numpyfunksjonen loadtxt() lar oss importera data frå tekstfiler. Ei tekstfil er ei fil som du kan lesa i feks notisblokk, og som er grei å bruka når vi har små datamengder. Anta vi har ei tekstfil som heiter datafil.tx med ei kolonne for tid og ei for posisjon, og ei overskrift slik:

# tid  posisjon
0.1  0.3
0.2  0.4
0.3  0.6
0.4  0.8
0.5  0.85

Då kan vi lesa denne fila med følgande kode:

# Dataimport:
t, s = np.loadtxt('datafil.txt', skiprows=1, unpack=True)

Her bli t og s numpy-arrays som du kan bruka til å plotta data.

Vi kan også lagra data frå eit array til ei tekstfil med numpy.savetxt().

LENKER

Python Numpy Tutorial.

Python Numpy Array Tutorial på datacamp.