Afsnit Py.1: Python som primitiv lommeregner
Her følger nogle eksempler på, hvordan Python kan bruges som lommeregner.
Da
python er et programmeringssprog og ikke en numerisk regnemaskine
er sædvanlige matematiske funktioner, som for eksempel kvadratrod og logaritme,
ikke til rådighed før man har importeret et passende modul.
Jeg anbefaler derfor at man altid importerer
numpy i sit
python-program.
import numpy as np
print(2*3)
| 6
print(2+3)
| 5
print(2-3)
| -1
print(6/2)
| 3.0
print(3**2)
| 9
print(2+3*2)
| 8
print((2+3)*2)
| 10
print(np.log(np.exp(10))) # log er den naturlige logaritme
| 10.0
print(np.sqrt(4))
| 2.0
Py.1.1 Variable i python
I
python indføres variable ved at skrive det navn, man ønsker, og
tildele variablen en værdi gennem et lighedstegn. Så selvom man umiddelbart
læser "x=2" som "x er lig med 2", bør man retteligt læse dette som
"x tildeles værdien 2".
import numpy as np
x=2
y=3
z=x*y;
print(z)
| 6
print(3*z)
| 18
Py.1.2 Vektorer i python
En af styrkerne ved et program som
python er,
at man kan samle en række tal
i en vektor og derefter lave beregninger, der involverer hele
vektoren ved simple ordrer. En vektor af længde
består af
tal med indeks fra 0 til
Hvis
python indeholder en vektor
kan man få fat i for eksempel det tredje element ved at skrive
(husk at i
python har det tredje element index 2).
En vektor kan dannes ved at skrive elementerne inden for de kantede
parenteser i kommandoen
np.array([])
med komma imellem. Vær opmærksom på, at hvis man ikke bruger
numpy
og blot skriver
[] med elementerne indskrevet inden for de
kantede parenteser, får man lavet en
liste og ikke en
vektor, se underafsnit nedenfor.
import numpy as np
v=np.array([3,7,2,-1,2,5])
print(v)
| [ 3 7 2 -1 2 5]
print(v[2]) # udtrække det tredje element med index 2
| 2
print(v[len(v)-1])
| 5
# sidste element i v idet len(v) angiver antal elementer i v
print(v[[1,3]]) # udtrækker andet og fjerde element med index 1 og 3
| [ 7 -1]
print(v[1:3]) # udtrækker elementerne med index fra 1 til (3-1)
| [7 2]
print(2*v)
| [ 6 14 4 -2 4 10]
print(2+v)
| [5 9 4 1 4 7]
print(min(v))
| -1
print(max(v))
| 7
print(np.argmin(v)) # angiver index i vektor for den mindste værdi
| 3
print(sum(v)) # sum af alle elementerne
| 18
print(np.cumsum(v)) # løbende sum langs vektoren
| [ 3 10 12 11 13 18]
print(np.exp(v))
| [2.00855369e+01 1.09663316e+03 7.38905610e+00 3.67879441e-01
| 7.38905610e+00 1.48413159e+02]
# fjerne indgang (med index 1) i vektor
print(np.delete(v,1))
| [ 3 2 -1 2 5]
# sætte to vektorer sammen i ny vektor
print(np.append(v[0:2],np.array([sum(v[2:4),sum(v[4:6])])))
| [3 7 1 7]
Her følger en række specielle vektorer, der kan angives uden at skrive
alle tallene i vektoren.
import numpy as np
w=np.arange(3,8) # tallene fra "start" til "slut"-1
print(w)
| [3 4 5 6 7]
w=np.arange(5) # tallene fra 0 til "slut"-1
print(w)
| [0 1 2 3 4]
print(w[1:4]) # elementer af w med index fra "start" til "slut"-1
| [4 5 6]
print(w[2:len(w)])
| [5 6 7]
print(np.linspace(3,7,9)) # 9 ækvidistante værdier mellem 3 og 7
| [3. 3.5 4. 4.5 5. 5.5 6. 6.5 7. ]
print(np.repeat(1,5)) # tallet 1 gentages 5 gange
| [1 1 1 1 1]
print(np.repeat([1,2],[3,4])) # 1 gentages 3 gange og 2 gentages 4 gange
| [1 1 1 2 2 2 2]
print(np.zeros(5)) # tallet 0 gentages 5 gange
| [0., 0., 0., 0., 0.]
print(np.ones(5)) # tallet 1 gentages 5 gange
| [1., 1., 1., 1., 1.]
Numpy vil i behandlingen af vektorer som udgangspunkt lave
elementvise beregninger. Hvis der ønskes matrixoperationer, skal der
bruges specielle operatorer.
import numpy as np
x=np.array([2,-1,3,8,4])
y=np.array([4,1,0,3,3])
print(x+y)
| [ 6 0 3 11 7]
print(x-y)
| [-2 -2 3 5 1]
print(x*y)
| [ 8 -1 0 24 12]
print(y/x)
| [ 2. -1. 0. 0.375 0.75 ]
print(x**2)
| [ 4 1 9 64 16]
Py.1.3 Datatyper og list kontra vektor
Python arbejder med to typer tal: heltal (int) og kommatal (float).
Normalt er dette ikke noget der har betydning for vores beregninger,
men det ligger bagved, at resultatet af for eksempel
np.sqrt(4) skrives som 2.0 (float) og ikke som 2 (int).
I python vil
[1,2,3] være en
liste med tre tal, hvorimod
np.array([1,2,3]) vil være en
vektor. Dette giver for
eksempel følgende forskel
Det relevante for os i dette kursus er at arbejde med vektorer,
hvorfor disse skal dannes ved brug af
np.array. Nogle funktioner, som egentligt skal have en vektor som input, vil
acceptere en liste, som så internt i funktionen laves om til en vektor.
Funktionen
np.random.choice i afsnit
1.1
er et eksempel på dette.
Py.1.4 Nul er ikke altid nul
Enhver elektronisk regnemaskine har en vis regnenøjagtighed.
Når vi beregner
-værdier, vil vi ofte gøre dette som
, hvor
selv er en sandsynlighed. Hvis
er meget tæt på
1, kan beregningen af
give værdien nul. I nogle tilfælde kan
beregnes direkte, hvorved at man ikke får nul, men en mere
præcis lille værdi. Situationen er vist nedenfor med en sandsynlighed
fra en
-fordeling med 1 frihedsgrad. Sandsynligheden for at
ligge til venstre for et punkt beregnes med
chi2.cdf,
hvorimod sandsynligheden for at
ligge til højre for punktet beregnes med
chi2.sf.
import scipy.stats as st
pval1=1-st.chi2.cdf(80,1)
pval2=st.chi2.sf(80,1)
print(pval1,pval2)
| 0.0 3.744097384202887e-19
ForegåendeNæste