NumPy (Numerical Python) is de hoeksteen van het Python data-ecosysteem. Het biedt een efficiรซnte, multidimensionale array-structuur (ndarray) en een uitgebreide bibliotheek van wiskundige functies.
Waarom NumPy in plaats van gewone Python-lijsten?
| Python-lijst | NumPy-array | |
|---|---|---|
| Snelheid | Traag voor wiskunde | Tot 100ร sneller |
| Geheugen | Meer overhead | Compacter |
| Types | Gemengd | Homogeen |
| Wiskunde | Geen vectoroperaties | Ingebouwd |
Pandas, Matplotlib en vrijwel elke ML-bibliotheek zijn intern gebouwd op NumPy.
import numpy as np
print(np.__version__)2.2.6
Arrays aanmaken vanuit lijstenยถ
# 1-dimensional array
v = np.array([1, 2, 3, 4, 5])
print(v)
print(type(v)) # <class 'numpy.ndarray'>[1 2 3 4 5]
<class 'numpy.ndarray'>
# 2-dimensional array (matrix): list of lists
M = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(M)[[1 2 3]
[4 5 6]
[7 8 9]]
Arrays inspecterenยถ
Drie attributen die je altijd als eerste controleert bij een onbekende array:
print("shape:", M.shape) # (3, 3) โ rows ร columns
print("ndim: ", M.ndim) # 2 โ number of dimensions
print("size: ", M.size) # 9 โ total number of elements
print("dtype:", M.dtype) # int64 โ element data typeshape: (3, 3)
ndim: 2
size: 9
dtype: int64
Datatypes (dtype)ยถ
NumPy-arrays zijn homogeen: alle elementen hebben hetzelfde type. Het type wordt automatisch bepaald, maar je kunt het ook expliciet opgeven.
a_int = np.array([1, 2, 3]) # int64 (default)
a_float = np.array([1.0, 2.0, 3.0]) # float64
a_bool = np.array([True, False, True]) # bool
a_explicit = np.array([1, 2, 3], dtype=np.float32) # explicit float32
print(a_int.dtype, a_float.dtype, a_bool.dtype, a_explicit.dtype)
# Convert type
a_converted = a_int.astype(float)
print(a_converted.dtype)int64 float64 bool float32
float64
Aanmaakfunctiesยถ
Je hoeft niet altijd vanuit een bestaande lijst te vertrekken โ NumPy heeft handige functies om veelgebruikte arrays direct te genereren.
print(np.zeros((3, 4))) # 3ร4 matrix of zeros (float64)
print()
print(np.ones((2, 3))) # 2ร3 matrix of ones
print()
print(np.full((2, 2), 7)) # 2ร2 matrix filled with 7
print()
print(np.eye(4)) # 4ร4 identity matrix[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
[[1. 1. 1.]
[1. 1. 1.]]
[[7 7]
[7 7]]
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
# arange: evenly spaced integers (like range, but as an array)
print(np.arange(0, 10, 2)) # [0 2 4 6 8]
# linspace: n evenly spaced points between start and stop (inclusive)
print(np.linspace(0, 1, 6)) # [0. 0.2 0.4 0.6 0.8 1.][0 2 4 6 8]
[0. 0.2 0.4 0.6 0.8 1. ]
Willekeurige getallen met np.random.default_rng()ยถ
De moderne manier om willekeurige getallen te genereren in NumPy is via een Generator-object. Door een seed te geven zorg je voor reproduceerbaarheid โ dezelfde seed geeft altijd dezelfde reeks getallen.
rng = np.random.default_rng(seed=42) # reproducible
# Random floats in [0, 1)
print(rng.random((3, 4)))[[0.77395605 0.43887844 0.85859792 0.69736803]
[0.09417735 0.97562235 0.7611397 0.78606431]
[0.12811363 0.45038594 0.37079802 0.92676499]]
rng = np.random.default_rng(seed=42)
# Random integers in [low, high)
print(rng.integers(0, 100, size=(2, 5)))[[ 8 77 65 43 43]
[85 8 69 20 9]]
rng = np.random.default_rng(seed=42)
# Normal distribution: mean=0, standard deviation=1
sample = rng.normal(loc=0.0, scale=1.0, size=1000)
print(f"mean: {sample.mean():.3f}, std: {sample.std():.3f}")mean: -0.029, std: 0.989
Basisstatistiekenยถ
NumPy biedt ingebouwde functies voor veelgebruikte statistieken.
data = np.array([4, 7, 13, 2, 1, 9, 15, 6, 8, 3])
print(f"sum: {np.sum(data)}")
print(f"mean: {np.mean(data):.2f}")
print(f"std: {np.std(data):.2f}")
print(f"min: {np.min(data)}")
print(f"max: {np.max(data)}")
print(f"median: {np.median(data):.1f}")sum: 68
mean: 6.80
std: 4.38
min: 1
max: 15
median: 6.5
Oefeningenยถ
Oefening 1 โ Maak de volgende arrays aan en druk telkens shape, ndim en dtype af:
Een 1D-array met de getallen 1 t/m 10
Een 4ร4-matrix van nullen met dtype
float32Een 3ร3-eenheidsmatrix
import numpy as np
# your solution hereOefening 2 โ Gebruik np.linspace om een array te maken met 9 gelijkmatig verdeelde punten tussen 0 en 2ฯ. Druk vervolgens de cosinus van elk punt af. Gebruik np.cos() en np.pi.
# your solution hereOefening 3 โ Maak een Generator met seed 123 en genereer:
Een 5ร5-matrix met willekeurige integers tussen 1 en 10 (inclusief 1, exclusief 10)
1000 steekproeven uit een normaalverdeling met gemiddelde 5 en standaardafwijking 2. Druk het empirisch gemiddelde en de empirische standaardafwijking af.
# your solution hereOefening 4 โ Gegeven scores = np.array([78, 92, 65, 88, 74, 95, 60, 83]). Bereken het gemiddelde, de mediaan, de standaardafwijking, het minimum en het maximum. Formatteer de output mooi met f-strings (2 decimalen).
scores = np.array([78, 92, 65, 88, 74, 95, 60, 83])
# your solution hereOefening 5 โ Vergelijk de twee aanmaakfuncties: maak een array met np.arange(0, 1, 0.1) en een met np.linspace(0, 1, 10). Zijn ze identiek? Onderzoek eventuele drijvendekommaproblemen door de twee arrays van elkaar af te trekken.
# your solution here