Vai al contenuto principale

Rilascio di NumPy 2.0: cambiamenti principali e migrazione

Scopri tutte le nuove funzionalità e le modifiche introdotte nell'aggiornamento NumPy 2.0.
· 9 min leggi

Scopri con l'IA

Man mano che la data science evolve, alcuni cambiamenti alle librerie più comuni sono necessari e, questa volta, la libreria NumPy viene aggiornata alla versione 2.0. Questo importante aggiornamento, rilasciato a giugno 2024, porta molte nuove funzionalità e miglioramenti alla popolare libreria Python.

Con un salto così grande nei cambiamenti, è inevitabile che ci siano aree da tenere d'occhio che potrebbero richiedere di adattare il tuo codice esistente.

In questo articolo, ti proponiamo una panoramica di cosa include NumPy 2.0, i cambiamenti chiave e come migrare a NumPy 2.0.

Introduzione a NumPy 2.0

Basato su anni di feedback e progressi tecnologici, NumPy 2.0 è un aggiornamento ambizioso, diverso dai molti update precedenti degli ultimi anni.

Nel loro post di rilascio, hanno presentato un'API aggiornata, regole migliorate di promozione degli scalari, una nuova API per i DType e un nuovo DType per le stringhe, miglioramenti di compatibilità e un allineamento degli standard dell'API. Grazie a questi interventi, gli utenti noteranno significativi miglioramenti nelle prestazioni e nella documentazione.

Tuttavia, con un cambiamento così grande alla libreria, questo nuovo rilascio comporta anche alcune rotture. Ad esempio, le nuove modifiche ad API e ABI non sono retrocompatibili.

Nuove funzionalità principali

Secondo le note di rilascio, NumPy 2.0 introduce cambiamenti significativi, e questi sono i più rilevanti:

Modifiche ad API e ABI

In questo aggiornamento sono state apportate diverse operazioni di pulizia all'API e all'ABI (Application Binary Interface).

Con il nuovo aggiornamento, come indicato nella NEP (NumPy Enhancement Proposal) 52, NumPy si discosta dalla sua abituale posizione di mantenere la retrocompatibilità per garantire un'API più snella, pulita e semplice.

Ecco alcune modifiche degne di nota:

  • Separazione tra API pubblica e privata: Utilizzando una struttura a moduli, l'API di NumPy per Python ha ora una chiara distinzione tra API pubblica e privata.
  • Pulizia degli spazi dei nomi: Le funzioni sono state semplificate per rendere più facile imparare NumPy. Consulta l' elenco completo delle rimozioni per maggiori informazioni.
  • Deprecazione di funzionalità di nicchia: Molte funzioni e alias non consigliati sono stati rimossi.
  • Nuovo tipo personalizzato: Per la C API, è stata rilasciata una nuova API pubblica per creare DType personalizzati.

Per quanto riguarda le modifiche all'ABI, con il nuovo rilascio ci sarà una rottura. Questo influenzerà i binari dei pacchetti che utilizzano la C API di NumPy.

Chiunque lo compili contro una qualsiasi precedente versione NumPy 1.xx non funzionerà con NumPy 2.0. Condividerò più avanti come migrare secondo le loro raccomandazioni. Incontrerai un messaggio ImportError, che indica un'incompatibilità binaria.

Nuova DType API e String DType

Come proposto nella NEP 41, questo aggiornamento 2.0 rilascia una nuova API per implementare tipi di dati personalizzati definiti dall'utente utilizzando il tipo di dato StringDType. Questa nuova API include il supporto nativo per tipi di dati stringa a lunghezza variabile, richiesto da tempo dagli utenti NumPy.

Regole di promozione degli scalari

Proposte inizialmente nella NEP 50, anche le regole di promozione degli scalari in NumPy sono state aggiornate per evitare sorprese agli utenti. In passato, la promozione dipendeva spesso dai valori dei dati degli array di input e non solo dai loro DType, un comportamento che può risultare confuso.

Per i nuovi percorsi di promozione, vedi l'immagine qui sotto:

Precisione e promozione dei DType

Fonte: Precisione e promozione dei DType in NumPy

Miglioramenti delle prestazioni

Questo nuovo rilascio introduce anche alcuni miglioramenti delle prestazioni.

Ecco alcune aree chiave che sono state migliorate:

  • Funzioni di ordinamento più veloci
  • Miglioramenti alle prestazioni delle operazioni di algebra lineare su macOS tramite macOS Accelerate

Compatibilità con Windows

Per soddisfare meglio gli utenti Windows, il team di NumPy ha corretto anche diversi problemi di compatibilità con il nuovo rilascio.

Ad esempio, hanno cambiato il tipo intero predefinito su Windows in int64 invece di int32, per allinearlo al comportamento predefinito sugli altri sistemi operativi.

Documentazione e usabilità migliorate

È stata aggiunta più documentazione alla struttura dei moduli di NumPy e sono stati migliorati la navigazione nella guida di riferimento. La documentazione sulla compilazione dai sorgenti è stata inoltre completamente riscritta.

Come migrare a NumPy 2.0

Aggiornare a NumPy 2.0

Per iniziare con questa nuova versione di NumPy, per prima cosa devi aggiornarla dalla tua versione attuale all'ultima disponibile.

Per farlo, usa semplicemente l'opzione di upgrade in questo comando:

pip install -U numpy

In alternativa, puoi anche usare questo:

pip install –upgrade numpy

Questa opzione aggiorna il pacchetto specificato alla versione più recente, che in questo caso è NumPy. Dopo aver eseguito il comando, lascia che il sistema installi il pacchetto finché non vedi il messaggio "Successfully installed numpy-2.0.0".

Se vuoi aggiornare a una versione specifica invece che all'ultima, puoi usare questo comando:

pip install numpy==2.0.0

Questo garantisce che la versione che stai installando sia quella giusta, in questo caso la 2.0.0.

Per un secondo controllo, esegui questo comando:

pip list

Questo dovrebbe elencare tutti i pacchetti/librerie installati e le rispettive versioni. Controlla l'output per verificare che la libreria numpy sia aggiornata alla versione 2.0.0. 

Durante l'installazione, potresti anche imbaterti in alcuni messaggi di dipendenza in rosso. Questo significa che potrebbero esserci problemi nel tuo codice dopo l'aggiornamento alla versione più recente. Potrai quindi analizzare le singole aree e librerie interessate.

L'aggiornamento a NumPy 2.0 può essere temporaneamente dirompente, quindi è meglio assicurarsi che tutto sia migrato correttamente nei tuoi script e nelle pipeline future.

Per una guida completa, consulta l' officiale Guida alla migrazione a NumPy 2.0 pubblicata dagli sviluppatori.

Ecco le aree chiave da considerare durante la migrazione:

Gestire i cambiamenti nella promozione dei tipi di dato di NumPy

Per una guida completa sui diversi cambi di comportamento e i cambiamenti attesi dei tipi di dato, fai riferimento a questa tabella nella NEP 50.

Il principale problema di retrocompatibilità riguarda la precisione degli scalari.

Ad esempio, quando viene eseguita un'operazione come questa:

np.float32(6) + 6.

Questo restituisce un tipo di dato float32 invece di float64, il che rende difficile la retrocompatibilità. Per affrontare il problema, ecco cosa raccomandano:

Effettua cast espliciti dei tipi di dato: usa gli scalari int(), float() o numpy_scalar.item() per specificare esplicitamente il tuo tipo di dato.

Abilita gli avvisi per rintracciare i cambiamenti: utilizza i warning per individuare i cambiamenti tramite i traceback degli errori.

Gestire i cambiamenti negli spazi dei nomi

Con questo aggiornamento 2.0, le numerose rimozioni negli spazi dei nomi possono influire sul tuo codice. Il team di NumPy suggerisce questi passaggi:

  1. Controlla gli alias deprecati e le linee guida per la migrazione qui.
  2. Sostituisci gli alias deprecati con un'alternativa retrocompatibile.
  3. Verifica i membri privati rimossi nell'aggiornamento 2.0.
  4. Usa l'API esistente se venivano utilizzati membri privati.

Gestire le rotture dell'ABI

Se stai usando un pacchetto Python che dipende dalla C API di NumPy, dovrai affrontare eventuali rotture dell'ABI. Gli sviluppatori hanno pubblicato alcuni consigli specifici per NumPy 2.0 per queste situazioni, per risolvere l'incompatibilità:

Plugin Ruff per aggiornare il codice Python

Per aiutarti nel processo di migrazione, puoi usare il plugin Ruff con una regola dedicata di Ruff, NPY201.

Ruff è disponibile come ruff su PyPI. Per installare Ruff, inserisci questo comando nel terminale:

pip install ruff

Per maggiori dettagli, vedi la guida completa all'installazione di Ruff.

Assicurati di specificare la regola NP201 nel tuo pyproject.toml:

[tool.ruff.lint]
select = ["NPY201"]

In alternativa, puoi anche specificare la regola NPY201 dalla riga di comando:

$ ruff check path/to/code/ --select NPY201

Contributi della community

Il rilascio di NumPy 2.0 è il culmine degli sforzi della sua community. Attraverso le numerose NEP suggerite dalla community, molte proposte attese da tempo sono finalmente state implementate.

Sviluppatori, ricercatori ed entusiasti hanno tutti svolto un ruolo fondamentale in questo rilascio innovativo, condividendo competenze, fornendo feedback e inviando miglioramenti al codice che hanno contribuito in modo significativo a plasmare NumPy 2.0.

Conclusione

NumPy 2.0 è un grande passo avanti per il linguaggio di programmazione Python, grazie alle numerose nuove funzionalità e ai miglioramenti in termini di prestazioni, compatibilità e usabilità. Se riscontri problemi durante la migrazione o qualche tipo di errore, è meglio contattare direttamente il team di NumPy.

Spero che questo articolo ti sia stato utile per capire i principali cambiamenti di questo entusiasmante aggiornamento di NumPy. Per approfondire, leggi il nostro tutorial su NumPy.

Se sei alle prime armi con NumPy e vuoi esplorare di più, prova il nostro corso Introduction to NumPy o dai un'occhiata a questo training live di NumPy con codice insieme. 

Austin Chia

Autore

Austin Chia

Sono Austin, blogger e autore tech con anni di esperienza come data scientist e data analyst nel settore sanitario. Partito dalla biologia, oggi aiuto altri a fare lo stesso passaggio attraverso il mio blog tecnologico. La mia passione per la tecnologia mi ha portato a collaborare come autore con decine di aziende SaaS, ispirando altre persone e condividendo le mie esperienze.

Argomenti

Correlato