Pandas & NumPy Academy · Lezione

Attributi e ispezione degli array

Esplori gli attributi ndim, shape, size e dtype e impari a modificare la forma di un array con reshape().

Lezione 2 di 413 passaggi

Attributi e ispezione degli array è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Pandas & NumPy Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Perché gli attributi degli array sono importanti

Prima di lavorare su un array, è utile conoscerne shape, dimensioni e dtype. NumPy fornisce queste informazioni immediatamente tramite attributi leggeri.

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])
print('ndim:', a.ndim)    # 2
print('shape:', a.shape)  # (2, 3)
print('size:', a.size)    # 6
print('dtype:', a.dtype)  # int64

ndim: numero di dimensioni

ndim indica quante dimensioni ha un array: una lista piatta ne ha 1, una lista di liste ne ha 2 e i tensori di ML spesso ne hanno 3 o 4.

import numpy as np

v = np.array([1, 2, 3])
print(v.ndim)   # 1

m = np.zeros((4, 5))
print(m.ndim)   # 2

t = np.ones((2, 3, 4))
print(t.ndim)   # 3

shape: la tupla delle dimensioni

shape è una tupla con una dimensione per ogni asse. Per un array 2D, contiene (righe, colonne) e può essere destrutturata per scrivere codice flessibile.

import numpy as np

a = np.arange(24).reshape(2, 3, 4)
print(a.shape)       # (2, 3, 4)

n_rows, n_cols = np.zeros((5, 7)).shape
print(n_rows, n_cols)  # 5 7

size: numero totale di elementi

size indica il numero totale di elementi: il prodotto di tutti i valori in shape. È utile per verificare che un reshape non abbia perso nulla.

import numpy as np

a = np.ones((3, 4, 5))
print(a.size)          # 60  (3*4*5)
print(np.prod(a.shape))# 60

# Memory estimate in bytes
print(a.size * a.itemsize, 'bytes')  # 480 bytes

dtype: tipo dei dati degli elementi

Il dtype descrive il tipo di ogni elemento, mentre itemsize indica la sua dimensione in byte. Passare da float64 a float32 dimezza la memoria e spesso rende l'esecuzione più veloce.

import numpy as np

a = np.array([1.5, 2.5, 3.5])
print(a.dtype)      # float64
print(a.itemsize)   # 8 bytes

b = a.astype(np.float32)
print(b.dtype)      # float32
print(b.itemsize)   # 4 bytes

nbytes: memoria totale utilizzata

nbytes indica la memoria totale dell'array in byte: size moltiplicato per itemsize. Lo controlli prima e dopo il downcasting per verificare di aver effettivamente risparmiato spazio.

import numpy as np

a = np.ones((1000, 1000), dtype=np.float64)
print(a.nbytes)  # 8000000 (8 MB)

b = a.astype(np.float32)
print(b.nbytes)  # 4000000 (4 MB)

reshape(): modificare la forma di un array

reshape assegna all'array una nuova forma senza copiare i dati, purché il numero di elementi resti invariato. Passi -1 e NumPy calcolerà automaticamente quella dimensione.

import numpy as np

a = np.arange(12)
print(a.shape)          # (12,)

b = a.reshape(3, 4)
print(b.shape)          # (3, 4)

c = a.reshape(2, -1)    # -1 inferred as 6
print(c.shape)          # (2, 6)

Appiattire con ravel() e flatten()

Sia ravel() sia flatten() riducono un array a una dimensione. La differenza è che ravel di solito condivide la memoria, senza creare una copia, mentre flatten crea sempre una nuova copia.

import numpy as np

m = np.array([[1, 2, 3], [4, 5, 6]])

r = m.ravel()     # view (usually)
f = m.flatten()   # always a copy

print(r)  # [1 2 3 4 5 6]
print(f)  # [1 2 3 4 5 6]

Trasporre gli array

L'attributo .T restituisce la trasposta, scambiando righe e colonne. L'operazione è gratuita, perché non copia i dati, ed è essenziale per allineare le matrici.

import numpy as np

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

strides: disposizione in memoria

strides indica di quanti byte NumPy avanza nella memoria per ogni dimensione. Ecco perché trasporre è gratuito: vengono semplicemente scambiati i valori di stride.

import numpy as np

a = np.ones((3, 4), dtype=np.float64)
print(a.strides)    # (32, 8)  — 4 cols x 8 bytes, 1 col x 8 bytes

b = a.T
print(b.strides)    # (8, 32)  — strides swapped, no data copy

Controllare viste e copie

Una view condivide la memoria con l'originale, quindi modificare una modifica anche l'altra; una copia è indipendente. Usi np.shares_memory(a, b) per verificare quale delle due ha.

import numpy as np

a = np.arange(6)
b = a.reshape(2, 3)  # view
print(np.shares_memory(a, b))  # True

c = a.copy()
print(np.shares_memory(a, c))  # False

Verifica rapida

Verifichi la Sua comprensione degli attributi degli array NumPy trattati in questa lezione.

Riepilogo della lezione

Ottimi progressi! ndim, shape e size descrivono la struttura, dtype descrive i dati, reshape restituisce una vista mentre flatten crea sempre una copia. Prossimo argomento: l'aritmetica sugli array.

Gratis per iniziare

Impara Python con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
30
Lezioni
120

Domande Frequenti

La lezione «Attributi e ispezione degli array» è gratuita?

Sì — il testo completo di «Attributi e ispezione degli array» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Pandas & NumPy Academy, passa a CoddyKit PRO. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Cosa imparerò in «Attributi e ispezione degli array»?

Esplori gli attributi ndim, shape, size e dtype e impari a modificare la forma di un array con reshape(). Eserciti Pandas & NumPy Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Pandas & NumPy Academy?

Non è richiesta alcuna esperienza precedente. Pandas & NumPy Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Attributi e ispezione degli array»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Pandas & NumPy Academy?

Sì. Ogni lezione Pandas & NumPy Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Creazione di array NumPy
  2. Attributi e ispezione degli array
  3. Aritmetica elemento per elemento
  4. Slicing e indicizzazione degli array
← Torna a Pandas & NumPy Academy