Avansert: Arrays II#
Forutsetninger
Denne delen forutsetter at man har vært gjennom delkapitlet Arrays.
Her kommer det litt mer om arrays.
Vektorregning#
Arrays fungerer som vektorer fra matematikken.
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# Sum
print(a + b) -> [5 7 9]
# Differanse
print(a - b) -> [-3 -3 -3]
# Produkt
print(a * b) -> [4 10 18]
# Skalarprodukt/prikkprodukt
print(np.dot(a, b)) -> 32
# Kryssprodukt
print(np.cross(a, b)) -> [-3 6 -3]
arange()
-funksjonen#
For å lage arrays med tall i stigende rekkefølge kan vi bruke arange()
-funksjonen.
import numpy as np
print(np.arange(10)) # Alle tall fra og med 0 til 10
print(np.arange(1, 10)) # Alle tall fra og med 1 til 10
print(np.arange(0, 10, 2)) # Alle tall fra og med 0 til 10, men med steglengde 2
[0 1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]
[0 2 4 6 8]
På samme måte som i range()
-funksjonen er slutten i arange()
-funksjonen ikke inkluderende. Det vil si at den bare går til sluttverdien, ikke til og med.
concatenate()
-funksjonen#
Hvis vi ønsker å legge sammen arrays til nye større arrays kan vi bruke concatenate()
-funksjonen.
import numpy as np
arr1 = np.arange(1, 4)
arr2 = np.arange(1, 4)
print(np.concatenate((arr1, arr2)))
[1 2 3 1 2 3]
zeros()
-funksjonen#
Hvis vi ønsker å fylle en array med mange nuller så kan vi bruke zeros()
-funksjonen. Legger vi en tuppel (f.eks (3, 3)
) inn som argument, så får vi en todimensjonell array.
import numpy as np
print(np.zeros(5)) # Lager en array med 5 nuller
print(np.zeros((3,3))) # Lager en 5x5 array med nuller
[0. 0. 0. 0. 0.]
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
Det finnes også en funksjon som heter ones()
. Kanskje du klarer å tenke deg frem til hva den gjør?
sort()
-funksjonen#
For å få en sortert array (stigende) kan vi bruke sort()
-funksjonen.
import numpy as np
from random import randint
arr = np.zeros(10) # Lager et array med nuller.
for n in range(len(arr)):
arr[n] = randint(1, 10) # Setter hvert element til en tilfeldig verdi.
print("Array:", arr) # Skriver ut arrayet.
print("Sortert array:", np.sort(arr)) # Skriver ut det sorterte arrayet.
Array: [9. 6. 8. 6. 2. 3. 5. 9. 8. 4.]
Sortert array: [2. 3. 4. 5. 6. 6. 8. 8. 9. 9.]
flip()
-funksjonen#
For å få en reversert array kan vi bruke flip()
-funksjonen.
import numpy as np
arr = np.arange(1, 10)
print("Array:", arr)
print("Reversert array:", np.flip(arr))
Array: [1 2 3 4 5 6 7 8 9]
Reversert array: [9 8 7 6 5 4 3 2 1]
reshape()
-funksjonen#
Hvis vi ønsker å gjøre endre på formen til en array kan vi bruke reshape()
-funksjonen.
import numpy as np
arr = np.arange(1,10) # Lager en array med tallene fra og med en til 10.
print("Array:", arr)
print("Omformet (3, 3):")
print(np.reshape(arr, (3, 3))) # Omformer arrayet til (3, 3). 3 rader og 3 kolonner.
Array: [1 2 3 4 5 6 7 8 9]
Omformet (3, 3):
[[1 2 3]
[4 5 6]
[7 8 9]]
Finne elementer (indeksere)#
Vi kan indeksere og arrays på denne måten. Dette fungerer på samme måte som for lister både i én og to dimensjoner.
import numpy as np
arr = np.array([1, 2, 3])
print(arr[0]) # Skriver ut første element i listen
1
Vi kan indeksere 2d-arrays på denne måten.
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr) # Hele arrayen
print("Element i posisjon [0][0]: ", arr[0][0]) # Skriver elementet i første rad og første kolonne
print("Element i posisjon [1][1]: ", arr[1][1]) # Skriver elementet i andre rad og andre kolonne
[[1 2 3]
[4 5 6]
[7 8 9]]
Element i posisjon [0][0]: 1
Element i posisjon [1][1]: 5
shape()
-funksjonen#
Vi ønsker noen ganger å se hvilken form en array har. Til det kan vi bruke shape()
-funksjonen.
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(np.shape(arr))
(2, 3)
Vi ser at formen på arrayet er 2x3. To rader og tre kolonner.
Legge til og trekke fra elementer#
Vi kan legge til elementer i arrays ved å bruke append()
-funksjonen.
import numpy as np
arr = np.array([1, 2, 3]) # Lager et array som kalles arr
print(arr)
arr = np.append(arr, 4) # Legger til elementet 4 på slutten av arrayet
print(arr)
[1 2 3]
[1 2 3 4]
Vi kan trekke fra elementer i arrays ved å bruke delete()
-funksjonen.
import numpy as np
arr = np.array([1, 2, 3]) # Lager et array som kalles arr
print(arr)
arr = np.delete(arr, 0) # Fjerner elementet med indeks 0
print(arr)
[1 2 3]
[2 3]
Vi ser at np.append()
og np.delete()
fungerer annerledes enn append()
- og pop()
-metodene i Python.
append()
- og pop()
legger til eller fjerner elementer i en liste in-place.
np.append()
og np.delete()
returnerer en ny array. Enten med et nytt element, eller med et element fjernet.
Oppgaver#
Oppgave 1
I denne oppgaven skal du lage flere arrays.
Skriv ut en array som inneholder alle oddetallene fra og med 1 til og med 19.
Skriv ut en array som inneholder alle oddetallene fra og med 1 til og med 19, baklengs.
Skriv ut en 2d-array med dimensjonene (5, 5) og som er fylt med nuller.
Skriv ut en 2d-array med dimensjonene (5, 5) og som er fylt med enere.
Oppgave 2
Lag en array med lengde 9 fylt med tilfeldige tall mellom 1 og 10 (inkluderende).
Skriv ut arrayet.
Skriv ut arrayet, sortert.
Skriv ut det sorterte arrayet, omformet til et \(3\)x\(3\)-rutenett.
Oppgave 3
Skriv ut gangetabellen med alle tallene fra og med 1
til og med 10
ved å lage en todimensjonell array.
En mulig utskrift kan se slik ut:
[[ 1 2 3 4 5 6 7 8 9 10]
[ 2 4 6 8 10 12 14 16 18 20]
[ 3 6 9 12 15 18 21 24 27 30]
[ 4 8 12 16 20 24 28 32 36 40]
[ 5 10 15 20 25 30 35 40 45 50]
[ 6 12 18 24 30 36 42 48 54 60]
[ 7 14 21 28 35 42 49 56 63 70]
[ 8 16 24 32 40 48 56 64 72 80]
[ 9 18 27 36 45 54 63 72 81 90]
[ 10 20 30 40 50 60 70 80 90 100]]
Hint: Det kan være lurt å starte med å lage en array som
np.zeros((10, 10)).astype(int)
..astype()
-metoden endrer arrayet slik at det i utgangspunktet blir fylt med heltall, ikke flyttall. Deretter må vi lage løkker for å indeksere og sette elementer i arrayet.
Bonus: Modifiser programmet slik at man kan skrive inn dimensjonene for gangetabellen