Wydano wersję biblioteki Python do obliczeń naukowych NumPy 2.0.0, skoncentrowaną na pracy z wielowymiarowymi tablicami i macierzami oraz oferującą szeroką kolekcję funkcji implementujących różne algorytmy związane z używaniem macierzy. NumPy jest jedną z najbardziej pożądanych bibliotek wykorzystywanych w obliczeniach naukowych. Kod projektu napisany jest w języku Python z zastosowaniem optymalizacji w języku C i wydawany jest na licencji BSD.
NumPy 2.0.0 uznawana jest za pierwsze istotne wydanie od 2006 roku.
W nowej wersji oprócz nowych możliwości oraz optymalizacji wydajności wprowadzono zmiany w ABI, Python API i C-API, które naruszają kompatybilność wsteczną. Na przykład, biblioteka SciPy zbudowana z NumPy 1.x do pracy z NumPy 2.0 będzie wymagała ponownej kompilacji. W niektórych przypadkach do użycia NumPy 2.0 w aplikacjach może być konieczne dokonanie zmian w kodzie.
Największe naruszenie dotyczy zachowania precyzji w wyrażeniach skalarnych, na przykład, „np.float32(3) + 3” teraz zwróci wartość o typie float32, a nie float64, zaś w wyrażeniach z wieloma typami do wyniku będzie użyty typ o najwyższej precyzji, tzn. „np.array([3], dtype=np.float32) + np.float64(3)” zwróci wartość o typie float64. Typy całkowite stosowane domyślnie na platformie Windows zostały zmienione — w systemach 64-bitowych stosowany jest typ całkowity 64-bitowy, a w systemach 32-bitowych 32-bitowy (wcześniej używano odpowiednika typu long w C, a teraz ekwiwalentu np.intp).
Niektóre definicje w C-API zostały wymienione lub usunięte, na przykład, zmieniona została struktura PyArray_Descr. Maksymalna liczba wymiarów i argumentów określonych przez makra NPY_MAXDIMS i NPY_MAXARGS została zwiększona do 64. Wszystkie typy kompleksowe zostały przekonwertowane na użycie standardowych typów z specyfikacji C99 (cfloat_t, cdouble_t, clongdouble_t). Dodano nowe C API do tworzenia własnych dtype. Zaproponowano nowe, uproszczone funkcje inicjalizacji PyArray_ImportNumPyAPI i PyUFunc_ImportUFuncAPI.
W Python API zapewniono bardziej wyraźny podział między publicznymi a prywatnymi API, zaproponowano nową strukturę modułów. Około 100 funkcji, modułów i stałych zostało przeniesionych z głównej przestrzeni nazw „np”, ogłoszonych jako przestarzałe lub usuniętych.
Oczyszczona przestrzeń nazw np.lib. Liczba obiektów w głównej przestrzeni nazw została zmniejszona o 10%, a w przestrzeni nazw numpy.lib — o 80%. Przeniesiono do kategorii prywatnych przestrzeń nazw numpy.core. Usunięto niektóre metody z klas np.ndarray i np.generic. Stworzono nową przestrzeń nazw numpy.stringsf z operacjami na łańcuchach.
Wśród nowych funkcji można wymienić wsparcie dla typów float32 i longdouble we wszystkich funkcjach numpy.fft, wsparcie dla standardowego API Array w głównej przestrzeni nazw, nową przestrzeń nazw i typy dla łańcuchów o zmiennej długości. Przeprowadzono optymalizację wydajności, wykorzystując biblioteki Intel x86-simd-sort i Google Highway dla funkcji sort, argsort, partition i argpartition, przyspieszając operacje na łańcuchach stałej długości w module numpy.char. Dodano nowe API
opt_func_info do śledzenia i introspekcji.
Źródło: opennet.ru
