Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Numpy is dé library voor wetenschappelijk rekenen in Python. Het biedt een hoogperformant multidimensioneel array object, en tools om met deze objecten te werken. Hier geven we een referentie van de meest belangrijke functionaliteit, maar bekijk zeker ook de officiële documentatie.

Om Numpy te gebruiken, moeten we eerst het numpy package importeren:

Arrays

Een numpy array is een raster van waarden, allemaal van hetzelfde type, en wordt geïndexeerd aan de hand van integers. De shape van een array is een tuple van integers die de grootte van de array langs elke dimensie aangeeft.

[1 2 3]
type(a): <class 'numpy.ndarray'>
a.shape: (3,)
a[0]: 1
a[1]: 2
a[2]: 3
[5 2 3]
[[1 2 3]
 [4 5 6]]
type(b): <class 'numpy.ndarray'>
b.shape: (2, 3)
b[0, 0]: 1
b[0, 2]: 3
b[1, 0]: 4

Indexatie kan ook gebeuren aan de hand van tuples van integers waardoor we de indexatie via variabelen kunnen doen.

3

Speciale arrays

Er zijn ook talrijke functies om speciale matrices te creëren op basis van shape parameters.

array([0, 1, 2, 3, 4])
array([0. , 0.25, 0.5 , 0.75, 1. ])
[[0. 0.]
 [0. 0.]
 [0. 0.]]
[[1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]]
[[7 7 7]
 [7 7 7]]
[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]
[[0.48062712 0.33460006 0.06931556]
 [0.32320907 0.67773802 0.24421142]]

Slicing

Zoals Python lists, kunnen we indexen gebruiken om slices uit numpy arrays te bekomen. We kunnen dat apart voor iedere dimensie doen

[ 4  8 12]
[ 4  8 12]
[[2 3]
 [6 7]]
a: [[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
b: [[2 3]
 [6 7]]
a: [[  1 777   3   4]
 [  5   6   7   8]
 [  9  10  11  12]]
b: [[777   3]
 [  6   7]]

Indien dit gedrag niet gewenst is, moeten we een expliciete kopie nemen van de oorspronkelijke array.

a: [[  1 777   3   4]
 [  5   6   7   8]
 [  9  10  11  12]]
c: [[777   3]
 [  6   7]]
a: [[  1 777   3   4]
 [  5   6   7   8]
 [  9  10  11  12]]
c: [[999   3]
 [  6   7]]

Boolean indexing

Je kan boolean waarden (True of False in Python) gebruiken om specifieke element uit een array te lichten. Dit wordt frequent gebruikt om arrays te filteren op basis van een bepaalde conditie.

[[False False]
 [ True  True]
 [ True  True]]
[3 4 5 6]
[3 4 5 6]

Er kunnen ook speciale functies aangeroepen worden om condities te evalueren.

[[ 1. nan]
 [ 3.  4.]
 [nan  6.]]
array([[False, True], [False, False], [ True, False]])
[[ 1. nan]
 [ 3.  4.]
 [nan  6.]]
[[ 1. nan]
 [ 3.  4.]
 [nan  6.]]

Datatypes (dtype)

Numpy probeert het datatype af te leiden uit de input, maar je kan ook expiciete types meegeven of casten.

['fruit' 'meat' 'vegetable' 'dairy']
<U9
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[24], line 1
----> 1 a.astype("float64")

ValueError: could not convert string to float: np.str_('fruit')
[0 1 2 3 4 5 6 7 8 9]
int64
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
float32
[1 2 3]
int32

Element-gewijze operaties

a: [[1. 2.]
 [3. 4.]]

a * 3: [[ 3.  6.]
 [ 9. 12.]]
a - 3: [[-2. -1.]
 [ 0.  1.]]
b: [[5. 6.]
 [7. 8.]]

a + b: [[ 6.  8.]
 [10. 12.]]
a: [[1. 2.]
 [3. 4.]]

b: [[5. 6.]
 [7. 8.]]

a*b: [[ 5. 12.]
 [21. 32.]]

Dot product

a: [ 9 10]

b: [11 12]

aTb: 219
aTb: 219
aTb: 219
a: [[1 2]
 [3 4]
 [5 7]]

b: [[ 5  6]
 [ 7  8]
 [10 11]]

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[35], line 6
      4 print(f"a: {a}\n")
      5 print(f"b: {b}\n")
----> 6 print(f"aTb: {a @ b}")

ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 3 is different from 2)
aTb: [[ 76  85]
 [108 121]]

Lineaire algebra met Numpy

Numpy biedt krachtige functies voor lineaire algebra operaties die essentieel zijn voor machine learning. Hier zijn enkele belangrijke functies.

Vector en matrix Normen

De norm van een vector of matrix is een maat voor de “grootte”. De meest gebruikte normen zijn:

Vector: [3 4]
L2 norm (Euclidean): 5.0
L1 norm (Manhattan): 7.0
L∞ norm (Maximum): 4.0

Matrix:
[[1 2]
 [3 4]]
Frobenius norm: 5.477225575051661

Determinant

De determinant van een matrix geeft informatie over de lineaire transformatie die de matrix representeert.

Matrix A:
[[1 2]
 [3 4]]
Determinant: -2.0000000000000004

Matrix B:
[[1 2]
 [2 4]]
Determinant: 0.0 (singulier!)

Matrix inverse

De inverse van een matrix A is een matrix A⁻¹ zodat A⁻¹A = I (identiteitsmatrix):

Matrix A:
[[1 2]
 [3 4]]

Inverse A⁻¹:
[[-2.   1. ]
 [ 1.5 -0.5]]

A × A⁻¹ (should be identity):
[[1.0000000e+00 0.0000000e+00]
 [8.8817842e-16 1.0000000e+00]]

Identity matrix:
[[1. 0.]
 [0. 1.]]

Eigenwaarden en Eigenvectoren

Eigenwaarden en eigenvectoren zijn fundamenteel in lineaire algebra en machine learning.

Matrix A:
[[4 2]
 [1 3]]

Eigenwaarden: [5. 2.]

Eigenvectoren:
[[ 0.89442719 -0.70710678]
 [ 0.4472136   0.70710678]]

Eigenwaarde 1: 5.000
A × v = [4.47213595 2.23606798]
λ × v = [4.47213595 2.23606798]
Verschil: True

Eigenwaarde 2: 2.000
A × v = [-1.41421356  1.41421356]
λ × v = [-1.41421356  1.41421356]
Verschil: True

Stelsels van lineaire vergelijkingen oplossen

Voor het oplossen van lineaire systemen van de vorm Ax = b:

Coëfficiënten matrix A:
[[2 3]
 [1 4]]
Constanten vector b: [7 6]
Oplossing x: [2. 1.]

Verificatie A × x = [7. 6.]
Should equal b = [7 6]
Correct: True

Singular Value Decomposition (SVD)

SVD is een krachtige matrix factorization techniek die veel gebruikt wordt in machine learning.

Original matrix A ((4, 3)):
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]

U shape: (4, 4)
s (singular values): [2.54624074e+01 1.29066168e+00 2.40694596e-15]
Vt shape: (3, 3)

Reconstructed matrix:
[[ 1.  2.  3.]
 [ 4.  5.  6.]
 [ 7.  8.  9.]
 [10. 11. 12.]]

Reconstruction accurate: True

Matrix rank

De rank van een matrix geeft het aantal lineair onafhankelijke rijen of kolommen aan.

Matrix A:
[[1 2]
 [3 4]]
Rank: 2 (full rank voor 2x2 matrix)

Matrix B:
[[1 2]
 [2 4]]
Rank: 1 (rank deficient!)

Matrix C:
[[1 2 3]
 [4 5 6]
 [7 8 9]]
Rank: 2 (rank deficient voor 3x3 matrix)

Array reshaping voor lineaire algebra

Vaak moeten we arrays hervormen voor matrix operaties.

Original 1D array: [1 2 3 4] (shape: (4,))

Column vector (reshape): 
[[1]
 [2]
 [3]
 [4]] (shape: (4, 1))

Column vector (newaxis): 
[[1]
 [2]
 [3]
 [4]] (shape: (4, 1))

Column vector (expand_dims): 
[[1]
 [2]
 [3]
 [4]] (shape: (4, 1))

Row vector: [[1 2 3 4]] (shape: (1, 4))

Matrix:
[[1 2]
 [3 4]]
Flattened: [1 2 3 4] (shape: (4,))