NumPy 2.2.0 版本說明#

NumPy 2.2.0 版本是一個快速發布版本,使我們回到通常一年兩次的發布週期。進行了許多小的清理工作,以及完成新的 StringDType 和改進對自由執行緒 Python 支援的工作。重點如下

  • 新函數 matvecvecmat,請參閱下方。

  • 許多改進的註解。

  • 改進對新 StringDType 的支援。

  • 改進對自由執行緒 Python 的支援

  • f2py 的修正

此版本支援 Python 版本 3.10-3.13。

棄用#

  • _add_newdoc_ufunc 現在已被棄用。應該改用 ufunc.__doc__ = newdoc

    (gh-27735)

已過期的棄用#

  • bool(np.array([])) 和其他空陣列現在會引發錯誤。請改用 arr.size > 0 來檢查陣列是否沒有元素。

    (gh-27160)

相容性注意事項#

  • numpy.cov 現在在 rowvar=False 時會正確地轉置單列(2d 陣列)設計矩陣。先前,單列設計矩陣在這種情況下會傳回純量,這是錯誤的,因此這是一個行為變更,現在將傳回適當形狀的陣列。

    (gh-27661)

新功能#

  • 用於矩陣-向量和向量-矩陣乘積的新函數

    定義了兩個新的廣義 ufuncs

    • numpy.matvec - 矩陣-向量乘積,將參數視為矩陣和列向量的堆疊。

    • numpy.vecmat - 向量-矩陣乘積,將參數視為列向量和矩陣的堆疊。對於複數向量,會取共軛複數。

    這些新增到現有的 numpy.matmul 以及 NumPy 2.0 中新增的 numpy.vecdot

    請注意,numpy.matmul 永遠不會取複數共軛,即使在其左側輸入是向量時也不會,而 numpy.vecdotnumpy.vecmat 都會對左側的複數向量取共軛(這被認為是轉置的向量,遵循物理慣例)。

    (gh-25675)

  • np.complexfloating[T, T] 現在也可以寫成 np.complexfloating[T]

    (gh-27420)

  • UFuncs 現在支援 __dict__ 屬性,並允許覆寫 __doc__(直接或透過 ufunc.__dict__["__doc__"])。__dict__ 也可用於覆寫其他屬性,例如 __module____qualname__

    (gh-27735)

  • np.number 及其子類型的 “nbit” 類型參數現在預設為 typing.Any。這樣,類型檢查器將推斷諸如 x: np.floating 之類的註解為 x: np.floating[Any],即使在嚴格模式下也是如此。

    (gh-27736)

改進#

  • datetime64timedelta64 的雜湊值現在正確地匹配 Python 的內建 datetimetimedelta 的雜湊值。即使對於具有不同時間單位的相等值,雜湊值現在的評估結果也相等。

    (gh-14622)

  • 修正了許多關於使用 StringDType 參數進行字串 ufuncs 的提升問題。使用字串 ufuncs 混合 StringDType 和固定寬度 DType 現在應該產生更一致的結果。

    (gh-27636)

  • 改進了對空 memmap 的支援。先前,除非設定非零 offset,否則空的 memmap 會失敗。現在即使 offset=0 也支援零大小的 memmap。為了實現這一點,如果 memmap 對應到一個空檔案,則該檔案會填充一個位元組。

    (gh-27723)

f2py 再次處理多個模組並公開變數#

已修正一個回歸問題,該問題允許 F2PY 使用者在僅具有賦值的模組中向 Python 公開變數,並且還修正了單個原始碼檔案中存在多個模組的情況。

(gh-27695)

效能改進和變更#

  • 當許多執行緒同時呼叫相同的 ufunc 操作時,改進了自由執行緒建置上的多執行緒擴展。

    (gh-27896)

  • NumPy 現在對協定使用快速失敗屬性查找。這可以大大減少函數呼叫或陣列建立的開銷,尤其是在使用自訂 Python 物件時。在 Python 3.12 或更新版本上將看到最大的改進。

    (gh-27119)

  • x86_64 和 i686 上的 OpenBLAS 建置時使用的核心較少。根據基準測試,這些核心周圍有 5 個效能群集:PRESCOTT NEHALEM SANDYBRIDGE HASWELL SKYLAKEX

  • Windows 上的 OpenBLAS 連結時不使用 quadmath,簡化了授權

  • 由於 Windows 上 OpenBLAS 的回歸問題,還原了在 OpenBLAS 0.3.26 中使用多個執行緒時的效能改進。

    (gh-27147)

  • NumPy 現在也為 Linux 上大型 np.zeros 分配指示巨頁。因此通常應能提高效能。

    (gh-27808)

變更#

  • numpy.fix 現在不會對整數和布林資料類型輸入陣列執行轉換為浮點資料類型。

    (gh-26766)

  • numpy.float64numpy.complex128 的類型註解現在反映它們也是內建 floatcomplex 類型的子類型。此更新可防止靜態類型檢查器在以下情況下報告錯誤

    x: float = numpy.float64(6.28)  # valid
    z: complex = numpy.complex128(-1j)  # valid
    

    (gh-27334)

  • 現在,摘要陣列(即,元素被 ... 替換的陣列)的 repr 包括陣列的 shape,類似於零大小和非顯而易見形狀的陣列的情況。透過此變更,當形狀無法從值推斷出來時,總是會給出形狀。請注意,雖然寫成 shape=...,但此參數實際上無法傳遞到 np.array 建構函式中。如果您遇到問題,例如,由於 doctest 失敗,您可以使用列印選項 legacy=2.1 來取得舊的行為。

    (gh-27482)

  • 直接在 NumPy 陣列或純量上呼叫 __array_wrap__ 現在在傳遞 return_scalar 時會做正確的事情(在 NumPy 2 中新增)。現在可以安全地在非純量結果上呼叫純量 __array_wrap__

    (gh-27807)

將 musllinux CI 映像檔和 wheels 從 1_1 升級到 1_2。這是因為 1_1 已 終止生命週期

(gh-27088)

移除 NEP 50 提升狀態選項#

現在已移除 NEP 50 提升狀態設定。它們始終僅作為臨時測試手段。如果環境變數設定為除 NPY_PROMOTION_STATE=weak 以外的任何值,將會發出警告,而 _set_promotion_state_get_promotion_state 已移除。如果程式碼使用了 _no_nep50_warning,則可以在不可用時使用 contextlib.nullcontext 來替換它。

(gh-27156)