Attributs de tableaux NumPy

Si tu prends une personne et que tu listes ses attributs, cela ressemblerait à ceci👇,

  • Taille : 1m75
  • Poids : 68 kg
  • Ă‚ge : 24 ans
  • etc…

De mĂŞme, les attributs d’un tableau NumPy sont les suivants,

  • dtype – Type de donnĂ©es
  • ndim – Nombre de dimensions
  • shape – Forme du tableau (qui est simplement le nombre de lignes et de colonnes en fonction des dimensions)
  • size – Nombre d’Ă©lĂ©ments prĂ©sents dans le tableau
  • itemsize – Consommation de mĂ©moire d’un seul Ă©lĂ©ment du tableau
  • nbytes – Consommation totale de mĂ©moire d’un tableau entier

Codons-les :

dtype

Nous l’avons dĂ©jĂ  vu, ne nous attardons pas sur ce point.

arr1 = np.array([1, 2, 3, 4])
arr2 = np.array(['a', 'b', 'c', 'd'])
arr3 = np.array([1.1, 2.2, 3.3, 4.4])
arr4 = np.array([True, False, True, False])
arr1.dtype, arr2.dtype, arr3.dtype, arr4.dtype

# (dtype('int64'), dtype('<U1'), dtype('float64'), dtype('bool'))

Exercice : CrĂ©er diffĂ©rents ensembles de tableaux et trouver leur type de donnĂ©es Ă  l’aide de l’attribut dtype.

ndim

Nous l’avons dĂ©jĂ  vu, mais passons rapidement en revue ces Ă©lĂ©ments.

arr4 = np.array([1, 2, 3, 4])
arr5 = np.array([[1, 2, 3], [4, 5, 6]])
arr6 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
arr4.ndim, arr5.ndim, arr6.ndim

# (1, 2, 3)

Dans le code ci-dessus, j’ai crĂ©Ă© 3 tableaux, Ă  savoir arr4, arr5 et arr6. Ces trois tableaux ont des dimensions, des formes et des tailles diffĂ©rentes.

En utilisant l’attribut ndim, nous avons trouvĂ© les dimensions de ces tableaux.

DĂ©couvrons la forme et la taille de ces tableaux Ă  l’aide des attributs shape et size.

shape

arr4.shape, arr5.shape, arr6.shape

# ((4,), (2, 3), (2, 2, 3))

La sortie indique la forme de,

  • arr4 – (4, )
  • arr5 – (2, 3)
  • arr6 – (2, 2, 3)

DĂ©composons cela.

Si on regarde arr4, il n’y a qu’un seul jeu de crochets ([]). Et dans cet ensemble de crochets, nous avons 4 Ă©lĂ©ments, Ă  savoir 1, 2, 3, 4.

La forme est donc de 4.

Voyons maintenant arr5, il y a deux séries de crochets ([]). Dans la première série de crochets, nous avons 2 éléments, à savoir [1, 2, 3], [4, 5, 6], et dans la deuxième série de crochets, nous avons 3 éléments chacun, à savoir 1, 2, 3 et 4, 5, 6.

La forme est donc (2, 3).

Pour faciliter la compréhension, imagine le tableau comme une matrice :

[1, 2, 3]
[4, 5, 6]

La matrice ci-dessus a 2 lignes et 3 colonnes, sa forme est donc (2, 3).

Dans arr6,

Le premier ensemble de crochets a 2 éléments → [[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]

Le deuxième ensemble de crochets a 2 éléments chacun → [1, 2, 3], [4, 5, 6] et [7, 8, 9], [10, 11, 12]

Le troisième ensemble de crochets a 3 éléments chacun → 1, 2, 3 | 4, 5, 6 et 7, 8, 9 | 10, 11, 12

La forme est donc (2, 2, 3).

J’espère que tu as bien compris le concept d’attribut de forme/shape.

size

arr4.size, arr5.size, arr6.size

# (4, 6, 12)

L’attribut size est un concept très simple Ă  comprendre.

Il donne la valeur du nombre d’Ă©lĂ©ments prĂ©sents dans le tableau.

Dans arr4, nous n’avons que 4 Ă©lĂ©ments → 1, 2, 3, 4

Dans arr5, nous avons 6 éléments → 1, 2, 3, 4, 5, 6

Dans arr6, nous avons 12 éléments → 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

Il suffit de compter le nombre de nombres prĂ©sents dans un tableau qui correspond Ă  la taille de ce tableau. C’est aussi simple que cela.

Les deux attributs suivants itemsize et nbytes sont liés à la consommation de mémoire. Voyons comment ils fonctionnent.

itemsize

arr4.itemsize, arr5.itemsize, arr6.itemsize

# (8, 8, 8)

Si tu te souviens de l’une de nos leçons prĂ©cĂ©dentes sur les types de donnĂ©es, tu sais que lorsque nous crĂ©ons un tableau d’entiers, il aura par dĂ©faut le type 'int64', ce qui signifie que chaque Ă©lĂ©ment du tableau occupera 8 octets de mĂ©moire.

C’est ce qui s’est passĂ© dans le code ci-dessus.

L’attribut itemsize nous donne la consommation de mĂ©moire d’un seul Ă©lĂ©ment du tableau.

Essayons de changer le dtype de 'int64' Ă  'int32'.

arr4 = np.array([1, 2, 3, 4], dtype='int32')

arr4.itemsize, arr5.itemsize, arr6.itemsize

# (4, 8, 8)

Nous venons de modifier le dtype de arr4 de 'int64' à 'int32', ce qui permet de réduire la consommation de mémoire de ses éléments individuels de 8 octets à 4 octets.

Exercice : Essaye de changer le dtype de arr5 et arr6 en 'int16' et vois ce qu’il se passe.

nbytes

L’attribut nbytes indique la consommation totale de mĂ©moire du tableau.

arr4.nbytes, arr5.nbytes, arr6.nbytes

# (16, 48, 96)

Dans la section itemsize, nous avons dit qu’un Ă©lĂ©ment unique dans arr4 occupe 4 octets de mĂ©moire et que dans arr4 nous avons un total de 4 Ă©lĂ©ments (1, 2, 3, 4), donc 4 x 4 = 16 octets.

La consommation totale de mémoire est de 16.

Pour arr5, un seul Ă©lĂ©ment occupe 8 octets d’espace mĂ©moire. Nous avons un total de 6 Ă©lĂ©ments.

Ainsi, 8 x 6 = 48 octets.

Exercice : Essaye de décomposer la consommation totale de mémoire de arr6.

C’est très bien ! Nous en avons terminĂ© avec les attributs NumPy.

Il est temps d’apprendre 👉 CrĂ©ation de tableaux avec les fonctions NumPy.