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 โ€” Operaties, broadcasting en hervorming

In deze notebook leer je de meest gebruikte NumPy-operaties voor data-analyse:

  • Element-gewijze versus matrix-bewerkingen

  • Broadcasting โ€” operaties op arrays van verschillende groottes

  • Aggregaties langs assen

  • Hervorming en samenvoegen van arrays

โš ๏ธ Het verschil tussen * (element-gewijs) en @ (matrixvermenigvuldiging) is de meest voorkomende verwarring โ€” we behandelen het expliciet.

Element-gewijze operatiesยถ

Alle standaard rekenkundige operatoren (+, -, *, /, **) werken element-gewijs op arrays van dezelfde vorm.

[11 22 33 44]
[ 10  40  90 160]
[10. 10. 10. 10.]
[ 1  4  9 16]
[0.     0.7071 1.     0.7071 0.    ]
[1.         2.71828183 7.3890561 ]

โš ๏ธ * vs. @ โ€” element-gewijs vs. matrixvermenigvuldigingยถ

Dit is de meest voorkomende verwarring bij NumPy:

A * B (element-wise):
[[ 5 12]
 [21 32]]

A @ B (matrix multiplication):
[[19 22]
 [43 50]]
dot product: 1.7000000000000002
element-wise: [0.5 0.6 0.6]

Broadcastingยถ

Broadcasting laat NumPy toe om operaties uit te voeren op arrays van verschillende vormen, door de kleinere array automatisch uit te breiden. Dit vermijdt onnodige geheugenkopieรซn.

Regel: Dimensies zijn compatibel als ze gelijk zijn, of als รฉรฉn van beide 1 is.

[11 12 13 14]
[2 4 6 8]
[[11 22 33]
 [14 25 36]
 [17 28 39]]
[[0.33 0.67 1.  ]
 [0.67 0.83 1.  ]
 [0.78 0.89 1.  ]]

Aggregaties langs assenยถ

Aggregatiefuncties kunnen langs een bepaalde as (axis) werken:

  • axis=0: langs de rijen (per kolom)

  • axis=1: langs de kolommen (per rij)

Mean per student (per row): [84.33333333 73.33333333 91.66666667 68.        ]
Mean per test (per column):  [78. 81. 79.]
Overall mean:                79.33333333333333
Max per student: [90 80 95 74]
Min per test:    [60 68 70]
Sum per student: [253 220 275 204]

Hervorming (reshape)ยถ

Met reshape verander je de vorm van een array zonder de data te wijzigen. Het totale aantal elementen moet gelijk blijven. De notatie -1 laat NumPy de ontbrekende dimensie automatisch berekenen.

1D: [ 0  1  2  3  4  5  6  7  8  9 10 11]

3ร—4 matrix:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

2ร—6 matrix:
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
[1 2 3 4 5 6]
[[1 4]
 [2 5]
 [3 6]]

Arrays samenvoegenยถ

Met np.vstack, np.hstack en np.concatenate voeg je arrays samen.

[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[ 1  2  3 10]
 [ 4  5  6 11]]
[1 1 2 3 4 5 6 9]
[1 3 6 0 2 4 7 5]

Oefeningenยถ

Oefening 1 โ€” Gegeven x = np.array([2, 4, 6, 8]) en y = np.array([1, 3, 5, 7]):

  • Bereken de element-gewijze vermenigvuldiging

  • Bereken het dot product

  • Leg in een comment het verschil uit

Oefening 2 โ€” Gegeven de matrix M = np.random.default_rng(0).integers(1, 100, (5, 4)) (5 studenten, 4 testen):

  • Bereken het gemiddelde per student (per rij)

  • Bereken de standaardafwijking per test (per kolom)

  • Druk de naam af van de โ€œbesteโ€ student (hoogste gemiddelde) โ€” gebruik np.argmax()

[[85 64 51 27]
 [31  5  8  2]
 [18 81 65 91]
 [50 61 97 73]
 [63 54 56 93]]

Oefening 3 โ€” Broadcasting oefening: Gegeven een matrix prices (3 producten ร— 4 kwartalen) en een array vat_rates (รฉรฉn per product). Bereken de prijzen inclusief BTW via broadcasting zonder een for-lus.

prices = np.array([[100, 110, 105, 115],   # product A
                   [200, 210, 195, 220],   # product B
                   [ 50,  52,  48,  55]])  # product C
vat_rates = np.array([0.06, 0.21, 0.06])  # VAT rate per product

Oefening 4 โ€” Hervorming en samenvoegen:

  1. Maak een array a = np.arange(24) en hervorm hem naar een 4ร—6-matrix

  2. Splits de matrix in een linker helft (eerste 3 kolommen) en een rechter helft (laatste 3 kolommen)

  3. Stapel de twee helften verticaal met np.vstack