NumPy 2.2.0 版本說明#
NumPy 2.2.0 版本是一個快速發布版本,使我們回到通常一年兩次的發布週期。進行了許多小的清理工作,以及完成新的 StringDType 和改進對自由執行緒 Python 支援的工作。重點如下
新函數
matvec
和vecmat
,請參閱下方。許多改進的註解。
改進對新 StringDType 的支援。
改進對自由執行緒 Python 的支援
f2py 的修正
此版本支援 Python 版本 3.10-3.13。
棄用#
_add_newdoc_ufunc
現在已被棄用。應該改用ufunc.__doc__ = newdoc
。(gh-27735)
已過期的棄用#
bool(np.array([]))
和其他空陣列現在會引發錯誤。請改用arr.size > 0
來檢查陣列是否沒有元素。(gh-27160)
相容性注意事項#
新功能#
用於矩陣-向量和向量-矩陣乘積的新函數
定義了兩個新的廣義 ufuncs
numpy.matvec
- 矩陣-向量乘積,將參數視為矩陣和列向量的堆疊。numpy.vecmat
- 向量-矩陣乘積,將參數視為列向量和矩陣的堆疊。對於複數向量,會取共軛複數。
這些新增到現有的
numpy.matmul
以及 NumPy 2.0 中新增的numpy.vecdot
。請注意,
numpy.matmul
永遠不會取複數共軛,即使在其左側輸入是向量時也不會,而numpy.vecdot
和numpy.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)
改進#
datetime64
和timedelta64
的雜湊值現在正確地匹配 Python 的內建datetime
和timedelta
的雜湊值。即使對於具有不同時間單位的相等值,雜湊值現在的評估結果也相等。(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.float64
和numpy.complex128
的類型註解現在反映它們也是內建float
和complex
類型的子類型。此更新可防止靜態類型檢查器在以下情況下報告錯誤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)