Numpy
- numpy.array
- Oversikt over NumPy Array-funksjoner
- Matematiske operasjoner
- Matriseregning
- Numpy og matplotlib
- Sammenligne arrays
Numpy er en av de mestbrukte eksterne biblioteker for Python. Ved bruk av den nye datatypen numpy.array kan vi lagre store mengder numerisk data på en effektiv måte.
For mer detalj, se på https://numpy.org/doc/stable/user/absolute_beginners.html
numpy.array
Vi kan lage et array direkte fra en liste og vi kan bruke den samme indeks-notasjonen:
import numpy as np
a = np.array([1., 4., 5., 8.])
print(a)
print(type(a))
print(a[:2])
print(a[3])
a[1:3] = 99
print(a)
a[:] = 11
print(a)
For flerdimensionale (nøstete) arrays har vi en enklere indeks-notasjon:
a = np.array( [ [1., 2., 3.], [4., 5., 6.] ] )
print(a[0,0] ) # a[0][0]
print(a[1,2] ) # a[1][2]
print(a.shape)
Vi kan ha (nesten) så mange dimensjoner vi vil. Her er et 3D array:
b = np.array([[[111., 112.], [121., 122.]], [[211., 212.], [221., 222.]]])
print(b)
print(b.shape)
print(b[1,1,1])
print(b[0,0,0])
Oversikt over NumPy Array-funksjoner
Det finnes flere hjelpefunksjoner for å lage nye arrays. For hver metode nedenfor, kan du fortelle hva skjer?
arange =np.arange(1., 2., 0.1) # fast skrittstørrelse
print(arange)
linspace = np.linspace(30,40,5) # fast start/end, fast antall verdier
print(linspace)
ones = np.ones((2,3))
print(ones)
zeros = np.zeros(7)
print(zeros)
full_array = np.full((2,2), 7.)
print(full)
random = np.random.random_sample((2,2))
print(random)
Matematiske operasjoner
Alle matematiske operasjonene skjer samtidig for alle elementer, vi bør ikke skrive en løkke:
import numpy as np
a = np.arange(10.)
print(a)
# [[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]]
b = a + 7
print(b)
# [[ 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ]]
c = b ** 2
print(c)
# [[ 49. 64. 81. 100. 121. 144. 169. 196. 225. 256. ]]
print(c - b)
print(a + b)
print(b * a)
print(np.sin(a))
Matriseregning
Numpy kan også brukes til matriseregning
a = np.array( [ [1., 2.], [3., 4.] ] )
b = np.array( [ [4., 3.], [2., 1.] ] )
dot = np.dot(a, b) # matrise-multiplikasjon ("matrix dot product")
print(dot)
a_at_b = a @ b # lettere måte å skrive det samme ("a ganger b")
print(a_at_b)
a_star_b = a_a * b # OBS: ikke matrise-multiplikasjon
print(a_star_b)
det = np.linalg.det(b) # determinanten til en matrise
print(det)
inv = np.linalg.inv(b) # inversen til en matrise
print(inv)
b_at_inv_b = b @ np.linalg.inv(b) # b ganger sin egen invers er identiteten (hurra)
print(b_at_inv_b)
Numpy kan stort sett gjøre alt du trenger med matriser. Alle funksjonene finnes her: https://numpy.org/doc/stable/reference/routines.linalg.html
Numpy og matplotlib
numpy og matplotlib er enkelt å bruke sammen:
import numpy as np
import matplotlib.pyplot as plt
xs = np.linspace(0, 5, 100)
ys = np.sin(xs) + 1/3 * np.sin(3 * xs)
plt.plot(xs, ys)
plt.show()
Sammenligne arrays
Vi kan også sammenligne arrays, resultatet blir et array av bool:
a = np.array([[6, 4], [5, 9]])
print(a >= 6)
Slike boolean-arrays kan brukes som index:
a = np.arange(10.)
filt = a ** 2 > 25 # kvadrat større enn 25
print(a[filt])
Og i vår plot-eksempel:
import numpy as np
import matplotlib.pyplot as plt
xs = np.linspace(0, 5, 100)
ys = np.sin(xs)
ys[ys > 0.5] = 0.5 # Hva skjer her? Hvilke verdier endres?
ys[ys < -0.5] = -0.5 # Hva skjer her? Hvilke verdier endres?
plt.plot(xs, ys)
plt.show()
Større numpy/matplotlib eksempler
Ny innhold i disse eksemplene er ikke pensum, som f.eks animasjoner. Flere eksempler ligger også på mitt.uib - Moduler - Uke 13