Uke 13 — numpy¶
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
i en effektiv måte.
Eksempler¶
Vi kan lage et array direkte fra en liste (prøv dette i en REPL), og vi kan bruke den samme indeks-notasjonen:
>>> import numpy as np
>>> a = np.array([1., 4., 5., 8.])
>>> a
array([1., 4., 5., 8.])
>>> type(a)
<type 'numpy.ndarray’>
>>> a[:2]
array([1., 4.])
>>> a[3]
8.0
>>> a[1:3] = 99
>>> a
array([1., 99., 99., 8.])
>>> a[:] = 11
>>> a
array([11., 11., 11., 11.])
For flerdimensionale (nøstete) arrays har vi en enklere indeks-notasjon:
>>> a = np.array( [ [1., 2., 3.], [4., 5., 6.] ] )
>>> a[0,0] # a[0][0]
1.0
>>> a[1,2] # a[1][2]
6.0
>>> a.shape
(2,3)
Det finnes flere hjelpefunksjoner for å lage nye arrays:
>>> np.arange(1., 2., 0.1) # fast skrittstørrelse
array([1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9])
>>> np.linspace(30,40,5) # fast start/end, fast antall verdier
array([ 30. , 32.5, 35. , 37.5, 40. ])
>>> np.ones((2,3))
array([[ 1., 1., 1.],
[ 1., 1., 1.]])
>>> np.zeros(7)
array([0., 0., 0., 0., 0., 0., 0.])
>>> np.full((2,2), 7.)
array([[7., 7.], [7., 7.]])
>>> np.random.random_sample((2,2))
array([[0.33896244, 0.75553158],
[0.42116679, 0.32801477]])
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))
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)
plt.plot(xs, ys)
plt.show()
Vi kan også sammenligne arrays, resultatet blir et array av bool:
>>> a = np.array([[6, 4], [5, 9]], float)
>>> a >= 6
array([[ True, False],
[False, True]], dtype=bool)
Slike boolean-arrays kan brukes som index:
>>> a = np.arange(10.)
>>> filt = a ** 2 > 25 # kvadrat større enn 25
>>> a[filt]
array([6., 7., 8., 9.])
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()
For mer detalj, se på numpy Quickstart – The Basics frem til «Shape Manipulation».
Større numpy/matplotlib eksempler (animation er ikke pensum)¶
Mer om disse eksemplene ser vi neste uke.