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.
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.
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.
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.
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.
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.
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
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])
np.linalg.norm() gir oss (mellom anna) lengden av ein vektor:
np.linalg.norm([3,4]) gir 5.0
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])
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.
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().
Python Numpy Array Tutorial på datacamp.