NumPy ndarray‑basis voor beginners in deep learning: array, dtype, shape, reshape, astype

1. Waarom beginnen we met ndarray?



Bij deep learning zie je vaak de volgende codepatronen:

  • De shape van een invoertensor controleren
  • reshape gebruiken voor batching
  • Voor GPU‑computatie naar float32 converteren

Allemaal zijn de “oorspronkelijke” bouwstenen het NumPy ndarray.

  • De PyTorch Tensor is een structuur die bijna exact het NumPy ndarray volgt
  • In een deep‑learning model zijn invoer, gewichten en uitvoer allemaal multidimensionale arrays (tensors)

Daarom is een goed begrip van ndarray gelijk aan het beheersen van de basis‑syntax voor tensor‑operaties.


2. Wat is een ndarray?

ndarray staat voor N‑dimensional array, oftewel een “N‑dimensionale array”.

  • 1‑D: vector
  • 2‑D: matrix
  • 3‑D en hoger: tensor (bijv. batch van afbeeldingen, tijdreeksen, video)

Voorbeeld:

import numpy as np

x = np.array([1, 2, 3])            # 1‑D (vector)
M = np.array([[1, 2], [3, 4]])     # 2‑D (matrix)

print(type(x))          # <class 'numpy.ndarray'>
print(x.ndim, x.shape)  # aantal dimensies, vorm
print(M.ndim, M.shape)
  • ndim: aantal dimensies
  • shape: grootte van elke dimensie

3. Hoe vergelijkbaar is een PyTorch Tensor?



Een PyTorch‑tensor is uiteindelijk ook een “multidimensionale array”.

import torch

x_np = np.array([[1, 2], [3, 4]])   # NumPy ndarray
x_torch = torch.tensor([[1, 2], [3, 4]])  # PyTorch Tensor

print(type(x_np))      # numpy.ndarray
print(type(x_torch))   # torch.Tensor

print(x_np.shape)      # (2, 2)
print(x_torch.shape)   # torch.Size([2, 2])

Gemeenschappelijke punten:

  • Beide zijn “multidimensionale numerieke arrays”
  • shape, reshape, dtype zijn vrijwel identiek
  • Operaties (+, *, @, …) werken op dezelfde manier

Belangrijkste verschillen (voor deep learning):

  • NumPy: CPU‑gebaseerd, geen automatische differentiatie
  • PyTorch Tensor: GPU‑ondersteuning, automatische differentiatie

Gebruikspatroon:

  • Concept‑oefeningen / data‑manipulatie → NumPy
  • Echte modeltraining → PyTorch

Hoe meer je vertrouwd raakt met ndarray, hoe natuurlijker PyTorch‑tensor‑operaties aanvoelen.


4. np.array: de basismethode om een ndarray te maken

De meest fundamentele constructor is np.array.

4.1 Python‑lijst → ndarray

import numpy as np

# 1‑D array (vector)
x = np.array([1, 2, 3])
print(x)
print(x.ndim)   # 1
print(x.shape)  # (3,)

# 2‑D array (matrix)
M = np.array([[1, 2, 3],
              [4, 5, 6]])
print(M)
print(M.ndim)   # 2
print(M.shape)  # (2, 3)
  • Een Python‑lijst of lijst‑van‑lijsten wordt door np.array omgezet in een ndarray.
  • De vaak voorkomende batch_size x feature_dim matrix is precies dit.

4.2 Snel een array met een initieel patroon maken

Voor experimenten maak je vaak een array gevuld met 0, 1 of willekeurige waarden.

zeros = np.zeros((2, 3))       # 2x3 matrix, alles 0
ones = np.ones((2, 3))         # 2x3 matrix, alles 1
randn = np.random.randn(2, 3)  # normaal verdeelde willekeurige waarden

print(zeros.shape)  # (2, 3)

Dit patroon is in PyTorch vrijwel identiek.

import torch

zeros_t = torch.zeros((2, 3))
ones_t = torch.ones((2, 3))
randn_t = torch.randn((2, 3))

5. dtype: het “datatype” van een array

dtype geeft aan welke numerieke type de elementen van de array hebben.

Veelvoorkomende types:

  • int32, int64: gehele getallen
  • float32, float64: drijvende komma‑getallen

Voorbeeld:

x = np.array([1, 2, 3])
print(x.dtype)  # meestal int64 of int32

y = np.array([1.0, 2.0, 3.0])
print(y.dtype)  # meestal float64

5.1 Een array met een specifieke dtype maken

x = np.array([1, 2, 3], dtype=np.float32)
print(x.dtype)  # float32

In deep learning wordt vaak float32 (PyTorch torch.float32) gebruikt omdat het GPU‑vriendelijk is en een goede balans biedt tussen precisie en geheugen‑gebruik.


6. shape: de “vorm” van de data

shape is een tuple die de grootte van elke dimensie beschrijft.

import numpy as np

x = np.array([1, 2, 3])
print(x.shape)  # (3,)

M = np.array([[1, 2, 3],
              [4, 5, 6]])
print(M.shape)  # (2, 3)

Veelvoorkomende shape‑voorbeelden in deep learning:

  • Een enkel feature‑vector: (feature_dim,) → bv. (3,)
  • Batch data: (batch_size, feature_dim) → bv. (32, 3)
  • Batch van afbeeldingen (PyTorch standaard): (batch_size, channels, height, width) → bv. (32, 3, 224, 224)

Door met shape in NumPy te oefenen, kun je sneller de oorzaak van een shape‑fout in PyTorch achterhalen.


7. reshape: de vorm veranderen

reshape verandert de vorm van een array zonder het aantal elementen te wijzigen.

import numpy as np

x = np.array([1, 2, 3, 4, 5, 6])
print(x.shape)  # (6,)

M = x.reshape(2, 3)
print(M)
print(M.shape)  # (2, 3)

Belangrijk:

  • Het totale aantal elementen moet gelijk blijven.

7.1 -1 gebruiken voor automatische berekening

In batching of beeldverwerking gebruik je vaak -1. -1 betekent “bereken dit automatisch”.

x = np.array([[1, 2, 3],
              [4, 5, 6]])  # shape: (2, 3)

# Alles in één dimensie (flatten)
flat = x.reshape(-1)        # shape: (6,)
print(flat)

# Opnieuw in 2 rijen, kolommen automatisch
M = flat.reshape(2, -1)     # shape: (2, 3)
print(M)

PyTorch werkt hier ook op dezelfde manier.

import torch

x_t = torch.tensor([[1, 2, 3],
                    [4, 5, 6]])  # (2, 3)

flat_t = x_t.reshape(-1)        # (6,)
M_t = flat_t.reshape(2, -1)     # (2, 3)

Een goede beheersing van reshape maakt het:

  • CNN‑feature‑maps flatten
  • RNN/LSTM‑input in de vorm (batch, seq_len, feature)
  • Batch‑dimensie verplaatsen

8. astype: het datatype van een array veranderen

astype converteert het datatype van een array.

import numpy as np

x = np.array([1, 2, 3])      # int
print(x.dtype)               # int32 of int64

x_float = x.astype(np.float32)
print(x_float)
print(x_float.dtype)         # float32

Veelvoorkomende situaties in deep learning:

  • Integer‑labels naar float voor verlies‑berekening
  • Data die in float64 arriveert naar float32 normaliseren
  • Voorbereiden van data voor PyTorch (type‑aanpassing)

Voorbeeld:

import torch
import numpy as np

x = np.array([1, 2, 3], dtype=np.int32)
x = x.astype(np.float32)              # naar float32
x_torch = torch.from_numpy(x)         # naar tensor
print(x_torch.dtype)                  # torch.float32

Als je het type niet aanpast, krijg je in PyTorch een fout zoals “Expected Float but got Double”.


9. Samenvatting: de basis‑syntax van ndarray

In dit artikel hebben we behandeld:

  1. ndarray: de fundamentele structuur voor alle data in deep learning
  2. Relatie met PyTorch Tensor: conceptueel gelijk, met GPU‑ondersteuning
  3. np.array: maken van arrays uit Python‑lijsten
  4. dtype: het numerieke type van de elementen
  5. shape: de vorm van de data
  6. reshape: vorm veranderen met behoud van elementen
  7. astype: datatype‑conversie

Beheers je deze zeven concepten, kun je:

  • shape‑fouten snel diagnosticeren
  • Code en wiskundige formules naadloos vertalen
  • PyTorch‑tutorials moeiteloos volgen

image