Dostępna jest wersja biblioteki Pythona do obliczeń naukowych NumPy 2.0.0, skupiająca się na pracy z wielowymiarowymi tablicami i macierzami, a także zapewniająca duży zbiór funkcji z implementacją różnych algorytmów związanych z wykorzystaniem macierzy. NumPy to jedna z najpopularniejszych bibliotek używanych do obliczeń naukowych. Kod projektu napisany jest w Pythonie z wykorzystaniem optymalizacji w C i jest rozpowszechniany na licencji BSD.
NumPy 2.0.0 to pierwsze znaczące wydanie od 2006 roku.
W nowej wersji oprócz nowych funkcji i optymalizacji wydajności wprowadzono zmiany w ABI, Python API i C-API, które naruszają wsteczną kompatybilność. Na przykład biblioteka SciPy skompilowana z NumPy 1.x będzie wymagała ponownej kompilacji, aby działała z NumPy 2.0. W niektórych przypadkach mogą być wymagane zmiany w kodzie, aby móc używać NumPy 2.0 w aplikacjach.
Najpoważniejszy błąd dotyczy zachowania precyzji wyrażeń skalarnych, na przykład „np.float32(3) + 3” zwróci teraz wartość typu float32, a nie float64, a w wyrażeniach wielotypowych do wyniku zostanie użyty typ o najwyższej precyzji, tj. „np.array([3], dtype=np.float32) + np.float64(3)” zwróci wartość typu float64. Domyślne typy całkowite używane na platformie zostały zmienione. Windows — w systemach 64-bitowych używany jest teraz 64-bitowy typ całkowity, a w systemach 32-bitowych — typ 32-bitowy (wcześniej używany był analogowy typ C long, teraz jest to odpowiednik np.intp).
Niektóre definicje w C-API zostały zastąpione lub usunięte, np. zmieniona została struktura PyArray_Descr. Maksymalna liczba wymiarów i argumentów ustawianych poprzez makra NPY_MAXDIMS i NPY_MAXARGS została zwiększona do 64. Wszystkie typy złożone zostały przełączone na używanie typów standardowych ze specyfikacji C99 (cfloat_t, cdouble_t, clongdouble_t). Dodano nowe API C do tworzenia niestandardowych typów. Zaproponowano nowe, uproszczone funkcje inicjujące PyArray_ImportNumPyAPI i PyUFunc_ImportUFuncAPI.
Interfejs API języka Python zapewnia bardziej wyraźne oddzielenie publicznych i prywatnych interfejsów API oraz wprowadza nową strukturę modułów. Około 100 funkcji, modułów i stałych zostało przeniesionych z głównej przestrzeni nazw „np”, uznanych za przestarzałe lub usuniętych.
Wyczyszczono 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%. Przestrzeń nazw numpy.core została przeniesiona do prywatnej. Usunięto niektóre metody z klas np.ndarray i np.generic. Utworzono nową przestrzeń nazw numpy.stringsf z operacjami na ciągach.
Nowe funkcje obejmują obsługę typów float32 i longdouble we wszystkich funkcjach numpy.fft, obsługę standardowego API Array w głównej przestrzeni nazw, nową przestrzeń nazw i typy ciągów o zmiennej długości. Optymalizację wydajności przeprowadzono przy użyciu bibliotek Intel x86-simd-sort i Google Highway dla funkcji łańcuchowych sort, argsort, partycjonowanie i argpartition, operacje na stałych ciągach znaków w module numpy.char zostały przyspieszone. Dodano nowe API
opt_func_info do śledzenia i introspekcji.
Źródło: opennet.ru
