È stata appena rilasciata l'ultima versione di NumPy, il modulo Python più usato per tutte quelle applicazioni che hanno a che fare con il calcolo scientifico.
La versione 1.20 introduce diverse novità: nel seguito cercheremo di riassumere quelle più significative.
Tipizzazione: numpy.typing
NumPy 1.20 introduce un nuovo sottomodulo chiamato numpy.typing, che permetterà agli sviluppatori una maggiore flessibilità nella gestione dei tipi, grazie all'introduzione di nuovi alias e alle due classi ArrayLike
e DtypeLike
. Va detto, comunque, che questo modulo è ancora in fase di sviluppo, ed è verosimile aspettarsi qualche irregolarità soprattutto a causa delle function annotations, su cui il team di sviluppo è tuttora all'opera.
A tutto ciò si aggiunge anche un lavoro non indifferente mirato a facilitare il processo di estensione dei dtypes e le relative operazioni di casting.
Performance
Anche le ottimizzazioni mirate a ridurre la velocità di esecuzione sono state significative, con un maggiore uso di istruzioni SIMD per ottimizzare l'elaborazione di dati multipli in parallelo. Ciò dovrebbe accelerare l'esecuzione di molte funzioni comuni, oltre a consentire un uso più esteso di alcune funzionalità di accelerazione moderne su hardware diversi.
Altre novità
In NumPy 1.20, le funzioni mean
, std
e var
sono state modificate per accettare un nuovo argomento: la parola chiave where
. L'uso di quest'ultimo parametro permetterà di limitare l'ambito di applicazione di queste funzioni, quando esse sono applicate ad oggetti numpy.ndarray
, specificando criteri di selezione. Il parametro where
è inoltre disponibile per le funzioni any
e all
.
Altri migliorie meno consistenti includono alcuni perfezionamenti nelle espressioni matematiche polinomiali, relativamente a tutti i tipi definiti nel modulo numpy.polynomial
. È stato inoltre migliorato l'output di array e oggetti tramite la revisioni dei vari metodi __repr__
.
Retrocompatibilità e API C
Le novità di NumPy 1.20 riguardano anche gli utenti che sfruttano le API C, dal momento che la macro PyArray_DescrCheck
è stata modificata in maniera significativa. Ciò vuol dire che il codice compilato con le versioni precedenti dell'API sarà incompatibile con la nuova versione. La documentazione fornisce comunque un "workaround" per ovviare a questo problema: sarà necessario incorporare manualmente la macro, sostituendola alla nuova definizione.
Un'altra potenziale sorgente di errori dovuta alle modifiche della nuova versione di NumPy consiste nella modifica delle dimensioni delle strutture PyArrayObject
e PyVoidScalarObject
. Chi utilizza tali strutture dovrà quindi controllare la documentazione per verificare in che modo il codice deve essere aggiornato, per evitare errori o brutte sorprese.
Infine, è bene sottolineare come NumPy 1.20 non funzionerà con Python 3.6, dal momento che le versioni supportate sono quelle che vanno dalla 3.7 alla 3.9. Vi sono anche numerosi costrutti considerati deprecati, come l'uso di alias per i tipi built-in, o il passaggio di shape = None
alle funzioni che richiedono il parametri shape
. Maggiori dettagli sulla nuova versione possono essere trovati nella documentazione ufficiale del progetto.