NumPy este cel mai popular pachet pentru Python. Acesta se ocupă de calcule numerice, inclusiv pentru serii, matrice și vectori multidimensionali. Include funcții matematice, inclusiv algebră liniară, transformări sau generări aleatorii de numere. De altfel, numele său vine de la Numerical Python.
În data science, NumPy este unul dintre principalele pachete utilizate și a servit, în timp, la crearea altor pachete populare în zona de date, precum pandas sau Matplotlib. La finalul articolului, am inclus și un grafic cu cele mai populare pachete Python în analiza datelor, în funcție de apariția pe GitHub.
În urmă cu un an scriam că pandas a ajuns la versiunea 2.0.0, moment din care pandas nu s-a mai bazat pe NumPy. Zilele trecute, a apărut și versiunea 2.0.0 din NumPy. La fel ca și în cazul pandas, și pentru NumPy aceasta este cea mai mare actualizare de la apariția sa, despre care voi detalia în acest articol.
Istoria NumPy
NumPy 1.0 a apărut în urmă cu 18 ani. De-a lungul acestei perioade, a fost actualizat pentru a aduce o performană mai bună. În general, au fost actualizări incrementale, adică vechiul cod să funcționeze corect și în continuare. Pe de altă parte, acest lucru minimizează scopul optimizărilor.
Lucrurile se schimbă odată cu apariția versiunii 2.0, care vine cu schimbări majore în sistemul NumPy. S-a renunțat inclusiv la cod foarte vechi de tip ABI (Application Binary Interface) din cauza căruia nu puteau fi făcute anumite îmbunătățiri.
NumPy 2.0 vine cu schimbări majore, iar unele dintre acestea au fost în lucru încă din 2019! În aprilie 2023, dezvoltatorii au ajuns la un acord comun privind majoritatea schimbărilor care vor apărea în versiunea 2 din NumPy.
Schimbări majore în NumPy 2.0
Iată câteva schimbări aduse în noua versiune, pe care cei care le-au dezvoltat le consideră cele mai importante:
- Modificări importante la Python API, acesta trecând printr-o curățare masiva, ceea ce spun ei că va face NumPy mai ușor de învățat și de folosit.
- Regulile de programare scalară au fost actualizate. Acestea determină cum sunt combinate diferite tipuri de date atunci când face operații cu scalari. Au fost introduse și operații care pot implica matricele zero-dimensionale.
- A fost introdus un nou DType API și un nou
dtype
, care vine de la „data type” și se referă la tipul de date al elementelor în biblioteca NumPy. A fost implementat șiStringDType
, care oferă suport și pentru tipurile de date care nu au o lungime previzibilă (variable-width). - O nouă compatibilitate pentru sistemul de operare Windows, unde reprezentarea cifrelor în sistemul 32-bit s-a actualizat la arhitectura de 64-bit.
- Suport pentru standardul Python array API, care este o specificație comună pentru librariile de matrice și tensori. Scopul său este să ofere un set coerent de API-uri, indiferent de biblioteca folosită.
Performanța NumPy 2.0
Așa cum era de așteptat, NumPy 2.0 vine și cu îmbunătățiri majore de performanță. Iată-le pe cele mai importante dintre acestea:
- Funcțiile de sortare (
sort
,argsort
,partition
,argpartition
) sunt de acum accelerate pentru cei care folosesc Intel x86-simd-sort, o bibliotecă C++ pentru rutine de sortare bazate pe SIMD (Single Instruction, Multiple Data). - Pentru cei care folosesc macOS, versiunea 14 mai sau nouă, va fi folosit Accelerate support.
- Operațiile
numpy.char
pentru datele cu lungile fixă (fixed-length) vor fi mai rapide. - Apare un nou API, numit
opt_func_info
care va ajuta să determine nucleele specifice hardware-ului, pentru ca apoi să le utilizeze.
Reamintesc că actualizarea NumPy la ultima versiune ar putea face codul mai vechi impracticabil. Așadar, este nevoie de teste sau de folosirea de versiuni diferite pentru o perioadă.
De asemenea, dacă folosiți un fișier de tipul requirements.txt
, cu toate librăriile și versiunile utilizate, nu uitați să faceți un update și aici.