ndarray.dtype în NumPy

Arată tipul elementelor dintr-un tablou (int64, float64, bool etc.) și câți octeți ocupă fiecare.

Sintaxă
a.dtype
a.itemsize
a.nbytes
np.dtype(tip)

Ce face ndarray.dtype

Toate elementele unui tablou au același tip, păstrat în atributul a.dtype. Cele mai folosite sunt int64 (întregi), float64 (numere zecimale), bool (adevărat/fals) și <U… (text Unicode cu lungime maximă).

Numărul din nume arată câți biți ocupă un element: int64 are 64 de biți, adică 8 octeți. a.itemsize dă octeții unui element, iar a.nbytes octeții tuturor elementelor. Tipurile mai mici (int8, float32) economisesc memorie, dar au un interval de valori mai mic.

Tipul se alege la creare (dtype=...) sau se schimbă apoi cu astype().

Ce returnează

dtype: un obiect numpy.dtype; itemsize și nbytes: întregi (octeți).

Exemple

Exemplul 1: Tipuri deduse din date

import numpy as np

print(np.array([1, 2, 3]).dtype)
print(np.array([4.5, 7.0]).dtype)
print(np.array([True, False]).dtype)
print(np.array(["Ana", "Mihai"]).dtype)
print((np.array([9, 4, 7]) > 5).dtype)

Rezultat

int64
float64
bool
<U5
bool

Exemplul 2: Memoria ocupată

Aceleași 1000 de valori ocupă de 8 ori mai puțin ca int8 decât ca int64.

import numpy as np

a = np.zeros(1000, dtype=np.int64)
b = np.zeros(1000, dtype=np.int8)
print(a.dtype, a.itemsize, "octeți/element,", a.nbytes, "octeți total")
print(b.dtype, b.itemsize, "octeți/element,", b.nbytes, "octeți total")

Rezultat

int64 8 octeți/element, 8000 octeți total
int8 1 octeți/element, 1000 octeți total

Exemplul 3: Limitele unui tip

np.iinfo arată valoarea minimă și maximă a unui tip întreg.

import numpy as np

print(np.iinfo(np.int8).min, np.iinfo(np.int8).max)
print(np.iinfo(np.int64).max)
print(np.dtype("float32").itemsize)

Rezultat

-128 127
9223372036854775807
4

Greșeli frecvente

  • Scrii a.dtype() cu paranteze: dtype este atribut.
  • Alegi int8 pentru valori mari: intervalul este doar -128 … 127, iar calculele care îl depășesc dau rezultate greșite.
  • Pui un număr zecimal într-un tablou de întregi (a[0] = 9.7): valoarea este trunchiată la 9, fără niciun avertisment.

Comenzi înrudite

  • ndarray.astype(): Convertește elementele unui tablou într-un alt tip, de exemplu din float în int sau din text în număr.
  • np.array(): Creează un tablou NumPy (ndarray) dintr-o listă, o listă de liste sau alt obiect asemănător.
  • ndarray.shape: Află forma unui tablou (rânduri, coloane), numărul de dimensiuni și numărul total de elemente.