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