NumPy 2.0.0釋出

banq發表於2024-06-18

NumPy 2.0.0是自 2006 年以來第一個主要版本:

  • https://github.com/numpy/numpy/releases/tag/v2.0.0
  • https://numpy.org/devdocs/release/2.0.0-notes.html
  • https://numpy.org/devdocs/numpy_2_0_migration_guide.html

亮點

  • np.quantile 現在支援 "權重 "引數
  • np.unique_counts / np.unique_values,其中一個相當於 pandas.Series.value_counts(),這將是非常棒的,避免了經常為使用 value_counts 而轉換為 Series。
  • 奇怪的是,新增了 np.device 和 np.to_device,但只支援 device='cpu'。也許 numpy 打算成為 Pytorch 的替代品?
  • 新增了 StringDtype。如果你有一個字串陣列,它的 dtype 通常是 "U58",表示它是一個最多 58 個字元的 varchar。現在有了 StringDType,在 np 陣列中新增長度可變的字串似乎變得更容易了。
  • 有了更好的實現,sort 和 argsort 將變得更快。

1、新功能

  • 新的可變長度字串 dtype(StringDType)和新的 numpy.strings 名稱空間,其中包含用於字串操作的高效能 ufuncs、
  • 在所有 numpy.fft 函式中支援 float32 和 longdouble、
  • 在主 numpy 名稱空間中支援陣列 API 標準。

2、效能改進:
透過使用英特爾 x86-simd-sort 和 Google Highway 庫,排序功能(sort、argsort、partition、argpartition)得到了加速,可能會有較大的(特定於硬體的)提速、

macOS 加速支援和 macOS >=14 的二進位制輪子,顯著提高了 macOS 上線性代數操作的效能,輪子也縮小了約 3 倍、

透過實施除了支援定長字串 dtypes 之外還支援 StringDType 的 ufuncs,numpy.char 定長字串操作已得到加速、

新的跟蹤和自省 API opt_func_info,用於確定哪些硬體特定的核心可用並將被排程。

numpy.save 現在使用第 4 版 pickle 協議來儲存具有物件 dtype 的陣列,這允許 pickle 物件大於 4GB,並將大型陣列的儲存速度提高了約 5%。


3、Python API 改進:
透過新的模組結構將公共 API 和私有 API 明確分開,現在每個公共函式都可以在一個地方使用、

刪除了許多非推薦函式和別名。這將使學習和使用 NumPy 變得更加容易。主名稱空間中的物件數量減少了 ~10%,numpy.lib 中的物件數量減少了 ~80%、

規範 dtype 名稱和新的 isdtype 自省函式、

4、改進 C API:

  • 新增用於建立自定義 dtypes 的公共 C API、
  • 刪除了許多過時的函式和宏,並隱藏了私有內部結構,以方便未來的擴充套件、
  • 新的、更易於使用的初始化函式:PyArray_ImportNumPyAPI 和 PyUFunc_ImportUFuncAPI。

5、改進的行為:
透過採用 NEP 50,改進了型別推廣行為。這修正了許多使用者對型別推廣的驚奇,以前型別推廣通常依賴於輸入陣列的資料值,而不僅僅是它們的 dtypes。有關詳細資訊,請參閱 NEP 和 NumPy 2.0 移植指南,因為這一變更可能會導致輸出 dtypes 發生變化,並降低混合型別操作的精度。

Windows 上的預設整數型別現在是 int64,而不是 int32,這與其他平臺上的行為一致、

陣列的最大維數從 32 改為 64


相容性問題:
NumPy 內部結構也發生了很多變化,包括繼續將程式碼從 C 遷移到 C++,這將使將來改進和維護 NumPy 變得更加容易。

建議所有依賴 NumPy ABI 的下游包針對 NumPy 2.0 構建新版本,並驗證該版本是否適用於 2.0 和 1.26 - 最好是在 2.0.0rc1(將是 ABI 穩定的)和最終的 2.0.0 版本之間的時期內,以避免給使用者帶來問題。


版本穩定性
NumPy 2.0.0是自 2006 年以來第一個主要版本,這是開源庫良好管理模式的一個範例。在設計公共應用程式介面時,不應在短時間內對應用程式介面進行破壞性更改,並且應儘量減少需要維護的 LTS 分支。

這可以讓工業專案趕上你的大部分功能和文件。數年後,您終於可以重新審視您的傳統 API,重新設計它們並將其升級到版本 2,同時還能保持向後相容性。

SQLAlchemy 是另一個正確構建的庫。

相關文章