Skip to article frontmatterSkip to article content

contenu de ce notebook (sauter si déjà acquis)

avoir une intuition de ce qui se passe dans en mémoire pour un numpy.ndarray

An array object represents a multidimensional, homogeneous array of fixed-size items.

organisation de la mémoire

créons un tableau numpy en 2 dimensions: 4 lignes et 5 colonnes

import numpy as np
mat =  np.array(
    [[1, 2, 3, 4, 5],
     [6, 7, 8, 9, 10],
     [11, 12, 13, 14, 15],
     [16, 17, 18, 19, 20]])
mat
array([[ 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20]])

la mémoire occupée en mémoire en nombre d’octets (byte)

mat.nbytes
160

organisation en mémoire des tableaux


rapidité des manipulations mémoire


offset


pas d’indirection mémoire

exercice: tableau de chaînes de caractères

exercices

  1. à partir de la liste Python de chaînes de caractères
l = ['un', 'deux', 'trois', 'cinq']

créez un tableau numpy.ndarray (de nom tab) et affichez-le

  1. modifiez le premier élément pour mettre quatre
tab[0] = 'quatre'

et affichez le tableau

  1. Que constatez-vous ? Pourquoi quatr ?

  2. affichez le type des éléments, le comprenez-vous ?
    < est une histoire d’ordre des octets dans les objets
    U signifie unicode
    Que signifie 5 ?

# votre code ici

numpy cherche le plus petit type pour stocker les chaînes de caractères initiales

ici une case est constituée d’un tableau d’au plus 5 caractères
(une case n’est pas l’adresse d’une chaîne de caractère mais bien la valeur de la chaîne)

exercice: tableau hétérogène

exercice

  1. créez un tableau np.ndarray à partir de la liste Python suivante
l = [127, 128, 17.4, np.pi, True, False]
  1. affichez le type des éléments
    que constatez-vous ?
    que numpy a trouvé le plus petit type pouvant contenir tous ces objets numériques

  2. ajoutez à la liste Python l, la chaîne de caractères bonjour
    et créez un autre numpy.ndarray à partir de la nouvelle valeur de l

  3. affichez les éléments
    Que constatez-vous ?

  4. quel type numpy a-t-il trouvé pour stocker tous ces éléments ?

# votre code ici

Pour plus d’informations, voir https://numpy.org/doc/stable/user/basics.types.html

index des tableaux

forme des tableaux numpy


1-dimension


2-dimension


3-dimension

les lignes et colonnes

# votre code ici

changer la forme d’un tableau

fonctions resize et reshape

# le code
seg = np.arange(0, 30)
seg = seg.reshape(5, 6) # reshape retourne le tableau ainsi modifié
print(seg)
seg = seg.reshape(2, 5, 3)
print(seg)
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]
 [24 25 26 27 28 29]]
[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]
  [ 9 10 11]
  [12 13 14]]

 [[15 16 17]
  [18 19 20]
  [21 22 23]
  [24 25 26]
  [27 28 29]]]
# le code
seg = np.arange(0, 30)
seg.resize(5, 6) # resize modifie le tabeau en place
print(seg)
seg.resize(2, 5, 3)
print(seg)
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]
 [24 25 26 27 28 29]]
[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]
  [ 9 10 11]
  [12 13 14]]

 [[15 16 17]
  [18 19 20]
  [21 22 23]
  [24 25 26]
  [27 28 29]]]

mémoire partagée

exercice

  1. créez un tableau tab de 6 ones de forme (6)
    et affichez-le

  2. mettez dans tab1 le reshape de tab avec la forme (3, 2)
    et affichez-le

  3. modifiez le premier élément de tab

  4. affichez tab1
    a-t-il été modifié ?

les deux objets tab et tab1 de type numpy.ndarray

# votre code