NumPy 2.0.0 發行說明#
NumPy 2.0.0 是自 2006 年以來的第一個主要版本。它是自上次功能版本發布以來 11 個月開發的成果,並且是 212 位貢獻者在 1078 個 pull request 中共同努力的成果。它包含大量令人興奮的新功能,以及 Python 和 C API 的變更。
這個主要版本包含在常規次要(功能)版本中不會發生的重大變更 - 包括 ABI 破壞、型別提升規則的變更,以及在 1.26.x 中可能未發出棄用警告的 API 變更。除了這些發行說明之外,關於如何適應 NumPy 2.0 變更的關鍵文件包括
重點#
此版本的重點包括
新功能
一個新的變長字串 dtype,
StringDType
和一個新的numpy.strings
命名空間,其中包含用於字串操作的高效能 ufunc,在所有
numpy.fft
函數中支援float32
和longdouble
,在主要的
numpy
命名空間中支援陣列 API 標準。
效能改進
排序函數(
sort
、argsort
、partition
、argpartition
)已透過使用 Intel x86-simd-sort 和 Google Highway 函式庫加速,並且可能會看到大幅(硬體特定的)速度提升,macOS Accelerate 支援和適用於 macOS >=14 的二進位 wheel,在 macOS 上進行線性代數運算時具有顯著的效能改進,並且 wheel 大約小 3 倍,
透過實作也支援
StringDType
以及固定長度字串 dtype 的 ufunc,numpy.char
固定長度字串操作已獲得加速,一個新的追蹤和內省 API,
opt_func_info
,用於確定哪些硬體特定的核心可用且將被調度。numpy.save
現在使用 pickle 協定版本 4 來儲存具有 object dtype 的陣列,這允許大於 4GB 的 pickle 物件,並將大型陣列的儲存速度提高約 5%。
Python API 改進
公開和私有 API 之間有明確的劃分,具有新的 模組結構,並且每個公共函數現在都可以在單一位置使用,
許多已移除不建議使用的函數和別名。這應該使學習和使用 NumPy 更加容易。主要命名空間中的物件數量減少了約 10%,而
numpy.lib
中的物件數量減少了約 80%,標準 dtype 名稱 和一個新的
isdtype
內省函數,
C API 改進
一個新的 用於建立自訂 dtype 的公共 C API,
許多過時的函數和巨集已移除,並且隱藏了私有內部結構,以簡化未來的可擴展性,
新的、更易於使用的初始化函數:
PyArray_ImportNumPyAPI
和PyUFunc_ImportUFuncAPI
。
行為改進
透過採用 NEP 50,型別提升行為的改進已獲得變更。這修正了許多使用者對於提升的驚訝,這些提升先前通常取決於輸入陣列的資料值,而不僅僅是它們的 dtype。由於此變更可能會導致輸出 dtype 的變更以及混合 dtype 操作的較低精確度結果,請參閱 NEP 和 NumPy 2.0 遷移指南 以瞭解詳細資訊。
Windows 上的預設整數型別現在是
int64
而不是int32
,與其他平台上的行為一致,陣列維度的最大數量已從 32 變更為 64
文件
此外,NumPy 內部結構還有許多變更,包括繼續將程式碼從 C 遷移到 C++,這將使未來更容易改進和維護 NumPy。
「天下沒有白吃的午餐」定理表明,所有這些 API 和行為改進以及更好的未來可擴展性都是有代價的。這個代價是
向後相容性。Python 和 C API 都有大量的重大變更。在大多數情況下,都有明確的錯誤訊息會告知使用者如何調整他們的程式碼。但是,也存在一些行為變更,對於這些變更,無法提供此類錯誤訊息 - 這些情況都在下面的「棄用和相容性」章節以及 NumPy 2.0 遷移指南 中涵蓋。
請注意,有一個
ruff
模式可以自動修復 Python 程式碼中的許多問題。NumPy ABI 的重大變更。因此,使用 NumPy C API 並針對 NumPy 1.xx 版本建置的套件二進位檔將無法與 NumPy 2.0 搭配使用。在匯入時,這些套件將會看到
ImportError
,並顯示關於二進位不相容性的訊息。可以針對 NumPy 2.0 建置二進位檔,這些二進位檔在執行時可與 NumPy 2.0 和 1.x 搭配使用。有關更多詳細資訊,請參閱 NumPy 2.0 特定建議。
建議所有依賴 NumPy ABI 的下游套件發布針對 NumPy 2.0 建置的新版本,並驗證該版本可與 2.0 和 1.26 搭配使用 - 理想情況是在 2.0.0rc1(將是 ABI 穩定的版本)和最終 2.0.0 發行版本之間的期間進行驗證,以避免使用者的問題。
此版本支援的 Python 版本為 3.9-3.12。
NumPy 2.0 Python API 移除#
np.geterrobj
、np.seterrobj
和相關的 ufunc 關鍵字引數extobj=
已被移除。所有這些的首選替代方案是使用上下文管理器with np.errstate():
。(gh-23922)
np.cast
已被移除。np.cast[dtype](arg)
的字面替代方案是np.asarray(arg, dtype=dtype)
。np.source
已被移除。首選替代方案是inspect.getsource
。np.lookfor
已被移除。(gh-24144)
numpy.who
已被移除。作為已移除功能的替代方案,可以使用 IDE(例如 Spyder 或 Jupyter Notebook)中提供的變數瀏覽器。(gh-24321)
在
numpy.exceptions
中存在的警告和例外(例如,ComplexWarning
、VisibleDeprecationWarning
)不再在主命名空間中公開。已從主命名空間中移除多個小眾列舉、過期的成員和函數,例如:
ERR_*
、SHIFT_*
、np.fastCopyAndTranspose
、np.kernel_version
、np.numarray
、np.oldnumeric
和np.set_numeric_ops
。(gh-24316)
在
numpy/__init__.py
中,以顯式匯入取代了from ... import *
。因此,這些主命名空間成員被移除:np.FLOATING_POINT_SUPPORT
、np.FPE_*
、np.NINF
、np.PINF
、np.NZERO
、np.PZERO
、np.CLIP
、np.WRAP
、np.WRAP
、np.RAISE
、np.BUFSIZE
、np.UFUNC_BUFSIZE_DEFAULT
、np.UFUNC_PYVALS_NAME
、np.ALLOW_THREADS
、np.MAXDIMS
、np.MAY_SHARE_EXACT
、np.MAY_SHARE_BOUNDS
、add_newdoc
、np.add_docstring
和np.add_newdoc_ufunc
。(gh-24357)
別名
np.float_
已被移除。請改用np.float64
。別名
np.complex_
已被移除。請改用np.complex128
。別名
np.longfloat
已被移除。請改用np.longdouble
。別名
np.singlecomplex
已被移除。請改用np.complex64
。別名
np.cfloat
已被移除。請改用np.complex128
。別名
np.longcomplex
已被移除。請改用np.clongdouble
。別名
np.clongfloat
已被移除。請改用np.clongdouble
。別名
np.string_
已被移除。請改用np.bytes_
。別名
np.unicode_
已被移除。請改用np.str_
。別名
np.Inf
已被移除。請改用np.inf
。別名
np.Infinity
已被移除。請改用np.inf
。別名
np.NaN
已被移除。請改用np.nan
。別名
np.infty
已被移除。請改用np.inf
。別名
np.mat
已被移除。請改用np.asmatrix
。np.issubclass_
已被移除。請改用內建的issubclass
。np.asfarray
已被移除。請改用具有正確 dtype 的np.asarray
。np.set_string_function
已被移除。請改用np.set_printoptions
,並為 NumPy 物件的自訂列印設定格式器。np.tracemalloc_domain
現在僅可從np.lib
取得。np.recfromcsv
和np.recfromtxt
已從主命名空間中移除。請改用具有逗號分隔符的np.genfromtxt
。np.issctype
、np.maximum_sctype
、np.obj2sctype
、np.sctype2char
、np.sctypes
、np.issubsctype
都已從主命名空間中移除,且沒有替代方案,因為它們是小眾成員。已棄用的
np.deprecate
和np.deprecate_with_doc
已從主命名空間中移除。請改用DeprecationWarning
。已棄用的
np.safe_eval
已從主命名空間中移除。請改用ast.literal_eval
。(gh-24376)
np.find_common_type
已被移除。請改用numpy.promote_types
或numpy.result_type
。若要實現scalar_types
引數的語意,請使用numpy.result_type
並傳遞0
、0.0
或0j
作為 Python 純量。np.round_
已被移除。請改用np.round
。np.nbytes
已被移除。請改用np.dtype(<dtype>).itemsize
。(gh-24477)
np.compare_chararrays
已從主命名空間中移除。請改用np.char.compare_chararrays
。主命名空間中的
charrarray
已被棄用。目前可以從np.char.chararray
匯入,而不會出現棄用警告,但我們計劃在未來完全棄用和移除chararray
。np.format_parser
已從主命名空間中移除。請改用np.rec.format_parser
。(gh-24587)
已從
np.dtype
中移除對七個資料型別字串別名的支援:int0
、uint0
、void0
、object0
、str0
、bytes0
和bool8
。(gh-24807)
實驗性的
numpy.array_api
子模組已被移除。請改用主要numpy
命名空間進行常規使用,或使用單獨的array-api-strict
套件,以用於numpy.array_api
主要用於的符合性測試用例。(gh-25911)
__array_prepare__
已移除#
UFuncs 在執行一般 ufunc 呼叫(非廣義 ufunc、縮減等)的計算之前呼叫 __array_prepare__
。該函數也會在某些線性代數函數的結果上,而不是呼叫 __array_wrap__
。
現在已移除。如果您使用它,請遷移到 __array_ufunc__
或依賴 __array_wrap__
,後者在所有情況下都會使用上下文呼叫,儘管僅在結果陣列填滿之後。在這些程式碼路徑中,__array_wrap__
現在將傳遞基底類別,而不是子類別陣列。
(gh-25105)
棄用#
np.compat
已被棄用,因為不再支援 Python 2。numpy.int8
和類似的類別將不再支援將超出範圍的 python 整數轉換為整數陣列。例如,將 255 轉換為 int8 不會傳回 -1。numpy.iinfo(dtype)
可用於檢查資料型別的機器限制。例如,np.iinfo(np.uint16)
傳回 min = 0 和 max = 65535。np.array(value).astype(dtype)
將提供所需的結果。np.safe_eval
已被棄用。應改用ast.literal_eval
。(gh-23830)
np.recfromcsv
、np.recfromtxt
、np.disp
、np.get_array_wrap
、np.maximum_sctype
、np.deprecate
和np.deprecate_with_doc
已被棄用。(gh-24154)
np.trapz
已被棄用。請改用np.trapezoid
或scipy.integrate
函數。np.in1d
已被棄用。請改用np.isin
。別名
np.row_stack
已被棄用。請直接使用np.vstack
。(gh-24445)
__array_wrap__
現在傳遞arr、context、return_scalar
,並且不接受所有三個參數的實作支援已被棄用。其簽名應為__array_wrap__(self, arr, context=None, return_scalar=False)
(gh-25409)
用於
np.cross
的 2 維向量陣列已被棄用。請改用 3 維向量陣列。(gh-24818)
np.dtype("a")
別名np.dtype(np.bytes_)
已被棄用。請改用np.dtype("S")
別名。(gh-24854)
搭配函數
assert_array_equal
和assert_array_almost_equal
使用關鍵字引數x
和y
已被棄用。請改為以位置引數傳遞前兩個引數。(gh-24978)
numpy.fft
對於在引數中使用 None 值的 n 維轉換的棄用#
根據陣列 API 標準,使用 fftn
、ifftn
、rfftn
、irfftn
、fft2
、ifft2
、rfft2
或 irfft2
,且 s
參數設定為非 None
的值,而 axes
參數設定為 None
已被棄用。若要保留目前的行為,請為維度為 k 的陣列將序列 [0, …, k-1] 傳遞給 axes
。
此外,將包含 None
值的陣列傳遞給 s
已被棄用,因為該參數在 NumPy 文件和陣列 API 規範中都記錄為接受整數序列。若要使用對應的 1 維轉換的預設行為,請傳遞與其 n
參數的預設值相符的值。若要使用每個軸的預設行為,可以省略 s
引數。
(gh-25495)
np.linalg.lstsq
現在預設為新的 rcond
值#
lstsq
現在使用新的 rcond 值,即機器精度乘以 max(M, N)
。先前,使用機器精度,但發出了 FutureWarning 以通知最終會發生此變更。仍然可以透過傳遞 rcond=-1
來實現舊的行為。
(gh-25721)
過期的棄用#
np.core.umath_tests
子模組已從公共 API 中移除。(在 NumPy 1.15 中已棄用)(gh-23809)
PyDataMem_SetEventHook
棄用已過期且已移除。請使用tracemalloc
和np.lib.tracemalloc_domain
域。(在 NumPy 1.23 中已棄用)(gh-23921)
對
set_numeric_ops
和 C 函數PyArray_SetNumericOps
和PyArray_GetNumericOps
的棄用已過期,並且這些函數已移除。(在 NumPy 1.16 中已棄用)(gh-23998)
fasttake
、fastclip
和fastputmask
ArrFuncs
棄用現在已最終確定。已棄用的函數
fastCopyAndTranspose
及其 C 對應項現在已移除。對
PyArray_ScalarFromObject
的棄用現在已最終確定。(gh-24312)
np.msort
已被移除。作為替代方案,應改用np.sort(a, axis=0)
。(gh-24494)
np.dtype(("f8", 1)
現在將傳回形狀為 1 的子陣列 dtype,而不是非子陣列 dtype。(gh-25761)
不允許為 ndarray 的
.data
屬性賦值,並且會引發錯誤。如果寬度太小,
np.binary_repr(a, width)
將會引發錯誤。在
PyArray_DescrFromType()
中使用NPY_CHAR
將會引發錯誤,請改用NPY_STRING
NPY_UNICODE
或NPY_VSTRING
。(gh-25794)
相容性注意事項#
loadtxt
和 genfromtxt
預設編碼已變更#
loadtxt
和 genfromtxt
現在都預設為 encoding=None
,這可能會主要修改 converters
的工作方式。這些現在將傳遞 str
而不是 bytes
。請明確傳遞編碼以始終獲得新的或舊的行為。對於 genfromtxt
,此變更也表示傳回的值現在將是 unicode 字串而不是 bytes。
(gh-25158)
f2py
相容性注意事項#
f2py
將不再接受含糊不清的-m
和.pyf
命令列介面 (CLI) 組合。當傳遞多個.pyf
檔案時,將會引發錯誤。當同時傳遞-m
和.pyf
時,會發出警告,並且-m
提供的名稱將被忽略。(gh-25181)
已移除
f2py.compile()
輔助函式,因為它會洩漏記憶體,並且多年來一直被標記為實驗性功能,而且是以精簡的subprocess.run
包裝器實作。它也是測試瓶頸之一。請參閱 gh-25122 以瞭解完整理由。它也使用了幾個np.distutils
功能,這些功能過於脆弱,無法移植以與meson
搭配使用。強烈建議使用者將對
f2py.compile
的呼叫替換為對subprocess.run("python", "-m", "numpy.f2py",...
的呼叫,並使用環境變數與meson
互動。原生檔案也是一種選擇。(gh-25193)
排序函式行為的微小變更#
由於演算法變更和 SIMD 程式碼的使用,與 1.26.x 相比,使用不穩定方法的排序函式在 2.0.0 中可能會傳回略有不同的結果。這包括 argsort
和 argpartition
的預設方法。
移除 np.solve
中廣播時的歧義#
當 b
的維度比 a
少 1 時,np.solve(a, b)
的廣播規則是模糊不清的。這已以向後不相容的方式解決,並且現在符合 Array API。舊的行為可以使用 np.solve(a, b[..., None])[..., 0]
來重建。
(gh-25914)
修改了 Polynomial
的表示方式#
更新了 Polynomial
的表示方法,以在表示中包含定義域。純文字和 LaTeX 表示現在一致。例如,str(np.polynomial.Polynomial([1, 1], domain=[.1, .2]))
的輸出過去是 1.0 + 1.0 x
,但現在是 1.0 + 1.0 (-3.0000000000000004 + 20.0 x)
。
(gh-21760)
C 語言 API 變更#
已移除
PyArray_CGT
、PyArray_CLT
、PyArray_CGE
、PyArray_CLE
、PyArray_CEQ
、PyArray_CNE
巨集。PyArray_MIN
和PyArray_MAX
已從ndarraytypes.h
移動到npy_math.h
。(gh-24258)
已公開用於處理
numpy.dtypes.StringDType
陣列的 C 語言 API。這包括用於取得和釋放鎖定字串資料存取的互斥鎖,以及從陣列條目封裝和解封裝 UTF-8 位元組串流的函式。NPY_NTYPES
已重新命名為NPY_NTYPES_LEGACY
,因為它不包含新的 NumPy 內建 DType。特別是新的字串 DType 可能無法與處理舊版 DType 的程式碼正確運作。(gh-25347)
C-API 現在僅匯出陣列存取器的靜態內聯函式版本(先前這取決於是否使用「已棄用的 API」)。雖然我們不鼓勵這樣做,但結構欄位仍然可以直接使用。
(gh-25789)
NumPy 現在定義了
PyArray_Pack
以設定個別記憶體位址。與PyArray_SETITEM
不同,此函式相當於設定個別陣列項目,並且不需要 NumPy 陣列輸入。(gh-25954)
已從
PyArray_Descr
中移除->f
插槽。如果您使用此插槽,請將存取它替換為PyDataType_GetArrFuncs
(請參閱其文件和 NumPy 2.0 遷移指南)。在某些情況下,使用其他函式(例如PyArray_GETITEM
)可能是替代方案。PyArray_GETITEM
和PyArray_SETITEM
現在需要匯入 NumPy API 表才能使用,並且不再於ndarraytypes.h
中定義。(gh-25812)
由於執行階段相依性,存取 dtype 旗標的功能定義已從
numpy/ndarraytypes.h
移動,並且僅在包含numpy/ndarrayobject.h
後才可用,因為它需要import_array()
。這包括PyDataType_FLAGCHK
、PyDataType_REFCHK
和NPY_BEGIN_THREADS_DESCR
。PyArray_Descr
上的 dtype 旗標現在必須透過PyDataType_FLAGS
內聯函式存取,才能與 1.x 和 2.x 相容。此函式在npy_2_compat.h
中定義,以允許向後移植。大多數或所有使用者都應該使用PyDataType_FLAGCHK
,它在 1.x 上可用,並且不需要向後移植。Cython 使用者應該使用 Cython 3。否則,除非他們改用PyDataType_FLAGCHK
,否則存取將透過 Python 進行。(gh-25816)
C API 和 Cython 綁定中公開的 Datetime 功能#
已將函式 NpyDatetime_ConvertDatetime64ToDatetimeStruct
、NpyDatetime_ConvertDatetimeStructToDatetime64
、NpyDatetime_ConvertPyDateTimeToDatetimeStruct
、NpyDatetime_GetDatetimeISO8601StrLen
、NpyDatetime_MakeISO8601Datetime
和 NpyDatetime_ParseISO8601Datetime
新增至 C API,以方便在外部函式庫中於字串、Python datetime 和 NumPy datetime 之間進行轉換。
(gh-21199)
廣義 ufunc C API 的 const 正確性#
NumPy C API 用於建構廣義 ufunc 的函式 (PyUFunc_FromFuncAndData
、PyUFunc_FromFuncAndDataAndSignature
、PyUFunc_FromFuncAndDataAndSignatureAndIdentity
) 接受 NumPy 內部程式碼未修改的 types
和 data
引數。與 name
和 doc
引數一樣,第三方 Python 擴充模組可能會從靜態常數提供這些引數。types
和 data
引數現在是 const 正確的:它們分別宣告為 const char *types
和 void *const *data
。C 程式碼應該不受影響,但 C++ 程式碼可能會受到影響。
(gh-23847)
更大的 NPY_MAXDIMS
和 NPY_MAXARGS
,引入了 NPY_RAVEL_AXIS
#
NPY_MAXDIMS
現在是 64,您可能需要檢閱其使用情況。這通常用於堆疊配置,增加應該是安全的。但是,我們通常鼓勵移除任何 NPY_MAXDIMS
和 NPY_MAXARGS
的使用,以便最終完全移除限制。對於轉換輔助函式和鏡像 Python 函式(例如 take
)的 C-API 函式,NPY_MAXDIMS
用於表示 axis=None
。此類用法必須替換為 NPY_RAVEL_AXIS
。另請參閱 增加的最大維度數。
(gh-25149)
NPY_MAXARGS
不是常數且 PyArrayMultiIterObject
大小變更#
由於 NPY_MAXARGS
已增加,因此它現在是執行階段常數,而不是編譯時期常數。我們預期幾乎沒有使用者會注意到這一點。但是,如果用於堆疊配置,則現在必須替換為使用 NPY_MAXARGS
作為額外執行階段檢查的自訂常數。
sizeof(PyArrayMultiIterObject)
不再包含物件的完整大小。我們預期沒有人會注意到此變更。這是為了避免 Cython 的問題所必需的。
(gh-25271)
自訂舊版使用者 dtype 的必要變更#
為了改進我們的 DType,不幸的是必須中斷 ABI,這需要對使用 PyArray_RegisterDataType
註冊的 dtype 進行一些變更。請參閱 PyArray_RegisterDataType
的文件,以瞭解如何調整您的程式碼並實現與 1.x 和 2.x 的相容性。
(gh-25792)
新的公開 DType API#
NEP 42 DType API 的 C 語言實作現在是公開的。雖然 DType API 已在 NumPy 中發布了幾個版本,但它僅適用於設定了特殊環境變數的工作階段。現在可以使用新的 DType API 和用於匯入 numpy C API 的正常 import_array()
機制,在 NumPy 外部編寫自訂 DType。
請參閱 自訂資料類型 以瞭解有關 API 的更多詳細資訊。與新功能一樣,請回報您在實作或使用新 DType 時遇到的任何錯誤。處理 dtype 的下游 C 程式碼可能需要更新,才能與新的 DType 正確運作。
(gh-25754)
新的 C-API 匯入函式#
我們現在新增了 PyArray_ImportNumPyAPI
和 PyUFunc_ImportUFuncAPI
作為靜態內聯函式,以匯入 NumPy C-API 表。新函式比 import_array
和 import_ufunc
具有兩個優點
它們檢查是否已執行匯入,如果沒有,則它們是輕量級的,允許謹慎地新增它們(雖然在大多數情況下這不是首選)。
舊機制是巨集而不是函式,其中包含
return
陳述式。
PyArray_ImportNumPyAPI()
函式包含在 npy_2_compat.h
中,以便更輕鬆地向後移植。
(gh-25866)
透過函式存取結構化 dtype 資訊#
dtype 結構欄位 c_metadata
、names
、fields
和 subarray
現在必須透過遵循相同名稱的新函式存取,例如 PyDataType_NAMES
。欄位的直接存取無效,因為它們並非適用於所有 PyArray_Descr
實例。metadata
欄位已保留,但也應優先使用巨集版本。
(gh-25802)
描述器 elsize
和 alignment
存取#
除非僅使用 NumPy 2 支援進行編譯,否則現在必須透過 PyDataType_ELSIZE
、PyDataType_SET_ELSIZE
和 PyDataType_ALIGNMENT
存取 elsize
和 alignment
欄位。在描述器附加到陣列的情況下,我們建議使用 PyArray_ITEMSIZE
,因為它存在於所有 NumPy 版本中。請參閱 PyArray_Descr 結構已變更 以瞭解更多資訊。
(gh-25943)
NumPy 2.0 C API 移除#
已移除
npy_interrupt.h
和對應的巨集(例如NPY_SIGINT_ON
)。我們建議定期查詢PyErr_CheckSignals()
或PyOS_InterruptOccurred()
(這些目前確實需要持有 GIL)。已移除
noprefix.h
標頭。將遺失的符號替換為其具有前綴的對應項(通常是新增的NPY_
或npy_
)。(gh-23919)
已移除
PyUFunc_GetPyVals
、PyUFunc_handlefperr
和PyUFunc_checkfperr
。如果需要,可以還原新的向後相容函式以引發浮點錯誤。移除原因:沒有已知的使用者,並且這些函式會使with np.errstate()
修復變得更加困難)。(gh-23922)
已移除自 NumPy 1.7 以來已棄用的 API 的一部分
numpy/old_defines.h
。這會移除PyArray_CONSTANT
形式的巨集。replace_old_macros.sed 指令碼可用於將它們轉換為NPY_CONSTANT
版本。(gh-24011)
已移除 ufunc 結構的
legacy_inner_loop_selector
成員,以簡化對分派系統的改進。沒有已知的使用者覆寫或直接存取此成員。(gh-24271)
已移除
NPY_INTPLTR
以避免混淆(請參閱intp
重新定義)。(gh-24888)
已移除進階索引
MapIter
和相關 API。它的(真正)公開部分未經過充分測試,並且只有一個已知的使用者 (Theano)。將其設為私有將簡化加速ufunc.at
的改進,使進階索引更易於維護,並且對於將陣列的最大維度數增加到 64 非常重要。如果此 API 對您很重要,請告訴我們,以便我們可以一起找到解決方案。(gh-25138)
已移除
NPY_MAX_ELSIZE
巨集,因為它僅反映內建數字類型,並且沒有內部用途。(gh-25149)
已移除
PyArray_REFCNT
和NPY_REFCOUNT
。請改用Py_REFCNT
。(gh-25156)
PyArrayFlags_Type
和PyArray_NewFlagsObject
以及PyArrayFlagsObject
現在是私有的。沒有已知的用例;如果需要,請使用 Python API。已移除
PyArray_MoveInto
、PyArray_CastTo
、PyArray_CastAnyTo
,請使用PyArray_CopyInto
,如果絕對需要,請使用PyArray_CopyAnyInto
(後者執行平面複製)。已移除
PyArray_FillObjectArray
,其唯一真正的用途是實作np.empty
。建立新的空陣列或使用PyArray_FillWithScalar()
(遞減現有物件的參考計數)。已移除
PyArray_CompareUCS4
和PyArray_CompareString
。請使用標準 C 字串比較函式。已移除
PyArray_ISPYTHON
,因為它具有誤導性,沒有已知的用例,並且很容易替換。已移除
PyArray_FieldNames
,因為不清楚它有什麼用。在某些可能的用例中,它也具有不正確的語義。已移除
PyArray_TypestrConvert
,因為它似乎用詞不當,並且不太可能被任何人使用。如果您知道大小或僅限於少數類型,請直接明確使用它,否則請透過 Python 字串。(gh-25292)
已移除
PyDataType_GetDatetimeMetaData
,自 NumPy 1.7 以來它實際上沒有執行任何操作。(gh-25802)
已移除
PyArray_GetCastFunc
。請注意,自訂舊版使用者 dtype 仍然可以將 castfunc 作為其實作提供,但現在已移除對它們的任何存取。原因是 NumPy 多年來從未在內部使用過它們。如果您使用簡單的數字類型,請直接使用 C 語言轉換。如果您需要替代方案,請告訴我們,以便我們可以建立新的 API,例如PyArray_CastBuffer()
,它可以根據 NumPy 版本使用舊的或新的轉換函式。(gh-25161)
新功能#
擴展了 np.add
以與 unicode
和 bytes
dtype 搭配使用。#
(gh-24858)
新的 bitwise_count
函式#
這個新函式計算數字中 1 位元的數量。bitwise_count
適用於所有 numpy 整數類型和類似整數的物件。
>>> a = np.array([2**i - 1 for i in range(16)])
>>> np.bitwise_count(a)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
dtype=uint8)
(gh-19355)
macOS Accelerate 支援,包括 ILP64#
新增了對更新的 Accelerate BLAS/LAPACK 函式庫的支援,包括 macOS 13.3 中的 ILP64 (64 位元整數) 支援。這帶來了 arm64 支援,以及常用線性代數運算高達 10 倍的顯著效能提升。如果在建置時選取 Accelerate,或者如果未完成明確的 BLAS 函式庫選取,則如果可用,將自動使用 13.3+ 版本。
(gh-24053)
二進位 wheel 也可用。在 macOS >=14.0 上,從 PyPI 安裝 NumPy 的使用者將獲得針對 Accelerate 而不是 OpenBLAS 建置的 wheel。
(gh-25255)
用於分位數和百分位數函式的權重選項#
現在 quantile
、percentile
、nanquantile
和 nanpercentile
提供 weights
關鍵字。只有 method="inverted_cdf"
支援權重。
(gh-24254)
改進的 CPU 優化追蹤#
提供了一種新的追蹤器機制,可以追蹤 NumPy 函式庫中每個優化函式(即使用硬體特定的 SIMD 指令的函式)的已啟用目標。透過此增強功能,可以精確監控已分派函式的已啟用 CPU 分派目標。
已將名為 opt_func_info
的新函式新增至新的命名空間 numpy.lib.introspect
,提供此追蹤功能。此函式可讓您根據函式名稱和資料類型簽章擷取有關已啟用目標的資訊。
(gh-24420)
f2py
的新 Meson 後端#
編譯模式下的 f2py
(即 f2py -c
) 現在接受 --backend meson
選項。這是 Python >=3.12 的預設選項。對於較舊的 Python 版本,f2py
仍將預設為 --backend distutils
。
為了在實際用例中支援此功能,在編譯模式下,f2py
接受一個或多個 --dep
旗標,這些旗標對應於 meson
後端中的 dependency()
呼叫,並且在 distutils
後端中不執行任何操作。
對於僅將 f2py
用作程式碼產生器(即沒有 -c
)的使用者,沒有任何變更。
(gh-24532)
f2py
的 bind(c)
支援#
函式和副程式都可以使用 bind(c)
註釋。f2py
將處理正確的類型對應,並為其他 C 介面保留唯一標籤。
注意: 根據設計,f2py
綁定不支援 bind(c, name = 'routine_name_other_than_fortran_routine')
,因為帶有 name
的 bind(c)
旨在僅保證 C 和 Fortran 中的名稱相同,而不是 Python 和 Fortran 中的名稱相同。
(gh-24555)
幾個測試函式的新 strict
選項#
現在 assert_allclose
、assert_equal
和 assert_array_less
提供 strict
關鍵字。設定 strict=True
將停用純量廣播行為,並確保輸入陣列具有相同的資料類型。
新增 np.core.umath.find
和 np.core.umath.rfind
UFuncs#
新增兩個 find
和 rfind
UFuncs,它們可作用於 Unicode 或位元組字串,並用於 np.char
中。它們的操作方式與 str.find
和 str.rfind
類似。
(gh-24868)
diagonal
和 trace
用於 numpy.linalg
#
已新增 numpy.linalg.diagonal
和 numpy.linalg.trace
,它們是與陣列 API 標準相容的 numpy.diagonal
和 numpy.trace
的變體。它們在定義二維子陣列的預設軸選擇上有所不同。
(gh-24887)
新增 long
和 ulong
dtypes#
已新增 numpy.long
和 numpy.ulong
作為 NumPy 整數,對應到 C 語言的 long
和 unsigned long
。在 NumPy 1.24 之前,numpy.long
是 Python int
的別名。
(gh-24922)
svdvals
用於 numpy.linalg
#
已新增 numpy.linalg.svdvals
。它計算(堆疊)矩陣的奇異值。執行 np.svdvals(x)
等同於呼叫 np.svd(x, compute_uv=False, hermitian=False)
。此函數與陣列 API 標準相容。
(gh-24940)
新增 isdtype
函數#
已新增 numpy.isdtype
,以提供一種符合陣列 API 標準的規範方式來分類 NumPy 的 dtypes。
(gh-25054)
新增 astype
函數#
已新增 numpy.astype
,以提供與陣列 API 標準相容的替代方案,取代 numpy.ndarray.astype
方法。
(gh-25079)
與陣列 API 相容的函數別名#
新增了 13 個現有函數的別名,以提高與陣列 API 標準的相容性
三角函數:
acos
、acosh
、asin
、asinh
、atan
、atanh
、atan2
。位元運算:
bitwise_left_shift
、bitwise_invert
、bitwise_right_shift
。其他:
concat
、permute_dims
、pow
。在
numpy.linalg
中:tensordot
、matmul
。
(gh-25086)
新增 unique_*
函數#
已新增 unique_all
、unique_counts
、unique_inverse
和 unique_values
函數。它們提供具有不同旗標集的 unique
功能。它們與陣列 API 標準相容,而且由於它們傳回的陣列數量不取決於輸入引數的值,因此它們更容易成為 JIT 編譯的目標。
(gh-25088)
ndarrays 的矩陣轉置支援#
NumPy 現在提供計算陣列(或陣列堆疊)矩陣轉置的支援。矩陣轉置相當於交換陣列的最後兩個軸。np.ndarray
和 np.ma.MaskedArray
現在都公開了 .mT
屬性,並且有一個匹配的新 numpy.matrix_transpose
函數。
(gh-23762)
用於 numpy.linalg
的陣列 API 相容函數#
新增了六個新函數和兩個別名,以提高與 numpy.linalg
的陣列 API 標準的相容性
numpy.linalg.matrix_norm
- 計算矩陣(或矩陣堆疊)的矩陣範數。numpy.linalg.vector_norm
- 計算向量(或向量批次)的向量範數。numpy.vecdot
- 計算兩個陣列的(向量)點積。numpy.linalg.vecdot
-numpy.vecdot
的別名。numpy.linalg.matrix_transpose
-numpy.matrix_transpose
的別名。(gh-25155)
已新增
numpy.linalg.outer
。它計算兩個向量的外積。它與numpy.outer
的不同之處在於它僅接受一維陣列。此函數與陣列 API 標準相容。(gh-25101)
已新增
numpy.linalg.cross
。它計算兩個(3 維向量陣列)的叉積。它與numpy.cross
的不同之處在於它僅接受三維向量。此函數與陣列 API 標準相容。(gh-25145)
用於 var
和 std
的 correction
引數#
已將 correction
引數新增至 var
和 std
,它是與陣列 API 標準相容的 ddof
替代方案。由於這兩個引數的目的相似,因此一次只能提供其中一個。
(gh-25169)
ndarray.device
和 ndarray.to_device
#
為了與陣列 API 標準相容,已將 ndarray.device
屬性和 ndarray.to_device
方法新增至 numpy.ndarray
。
此外,還為以下項目新增了僅限關鍵字 device
的引數:asarray
、arange
、empty
、empty_like
、eye
、full
、full_like
、linspace
、ones
、ones_like
、zeros
和 zeros_like
。
對於所有這些新引數,僅支援 device="cpu"
。
(gh-25233)
StringDType 已新增至 NumPy#
我們新增了一種新的可變寬度 UTF-8 編碼字串資料類型,實作「Python 字串的 NumPy 陣列」,包括支援使用者提供的遺失資料 sentinel。它旨在作為使用物件 dtype 的 Python 字串陣列和遺失資料 sentinel 的直接替代品。請參閱 NEP 55 和 文件 以取得更多詳細資訊。
(gh-25347)
用於 cholesky
和 pinv
的新關鍵字#
分別將 upper
和 rtol
關鍵字新增至 numpy.linalg.cholesky
和 numpy.linalg.pinv
,以提高陣列 API 標準的相容性。
對於 pinv
,如果未指定 rcond
和 rtol
,則會使用 rcond
的預設值。我們計劃在未來棄用並移除 rcond
。
(gh-25388)
用於 sort
、argsort
和 linalg.matrix_rank
的新關鍵字#
新增了關鍵字參數,以提高陣列 API 標準的相容性
已將
rtol
新增至matrix_rank
。
(gh-25437)
用於字串 ufuncs 的新 numpy.strings
命名空間#
NumPy 現在將一些字串操作實作為 ufuncs。舊的 np.char
命名空間仍然可用,並且在可能的情況下,該命名空間中的字串操作函數已更新為使用新的 ufuncs,從而大幅提高了其效能。
在可能的情況下,我們建議更新程式碼以使用 np.strings
中的函數,而不是 np.char
。未來,我們可能會棄用 np.char
,轉而使用 np.strings
。
(gh-25463)
numpy.fft
支援不同的精度和就地計算#
numpy.fft
中的各種 FFT 常式現在以 float、double 或 long double 精度原生執行計算,具體取決於輸入精度,而不是始終以 double 精度計算。因此,現在對於 single 精度,計算將不太精確,而對於 long double 精度,計算將更精確。輸出陣列的資料類型現在將相應地調整。
此外,所有 FFT 常式都獲得了一個 out
引數,可用於就地計算。
(gh-25536)
configtool 和 pkg-config 支援#
一個新的 numpy-config
CLI 腳本可用,可以查詢 NumPy 版本和使用 NumPy C API 所需的編譯旗標。這將使建置系統能夠更好地支援將 NumPy 用作依賴項。此外,Numpy 現在包含一個 numpy.pc
pkg-config 檔案。為了找到它與 PKG_CONFIG_PATH
一起使用的位置,請使用 numpy-config --pkgconfigdir
。
(gh-25730)
主要命名空間中對陣列 API 標準的支援#
主要的 numpy
命名空間現在支援陣列 API 標準。有關詳細資訊,請參閱 陣列 API 標準相容性。
(gh-25911)
改善#
any
、all
和邏輯 ufuncs 現在支援字串。#
(gh-25651)
整數序列作為 memmap
的 shape 引數#
現在可以使用任何整數序列作為 shape
引數來建立 numpy.memmap
,例如整數列表或 numpy 陣列。先前,只有 tuple 和 int 類型可以在不引發錯誤的情況下使用。
(gh-23729)
errstate
現在更快且上下文安全#
numpy.errstate
上下文管理器/裝飾器現在更快且更安全。先前,它不是上下文安全的,並且在執行緒安全方面存在(罕見的)問題。
(gh-23936)
透過使用 Highway 的 VQSort 提高了 AArch64 quicksort 速度#
首次引入 Google Highway 函式庫,在 AArch64 上使用 VQSort。在某些情況下,執行時間最多提高了 16 倍,請參閱 PR 以取得基準測試結果。未來將擴展到其他平台。
(gh-24018)
複數類型 - 底層 C 類型變更#
NumPy 所有複數類型的底層 C 類型已變更為使用 C99 複數類型。
雖然此變更不會影響複數類型的記憶體佈局,但它變更了用於直接擷取或寫入複數的實部或虛部的 API,因為直接欄位存取(如
c.real
或c.imag
中)不再是一種選項。您現在可以使用numpy/npy_math.h
中提供的公用程式來執行這些操作,如下所示npy_cdouble c; npy_csetreal(&c, 1.0); npy_csetimag(&c, 0.0); printf("%d + %di\n", npy_creal(c), npy_cimag(c));
為了簡化跨版本相容性,已新增等效的巨集和相容性層,下游套件可以使用它們繼續支援 NumPy 1.x 和 2.x。有關更多資訊,請參閱 複數支援。
numpy/npy_common.h
現在包含complex.h
,這表示complex
現在是一個保留關鍵字。
(gh-24085)
iso_c_binding
支援和改進的 f2py
通用區塊#
先前,使用者必須定義自己的自訂 f2cmap
檔案,才能使用 Fortran2003 iso_c_binding
內建模組定義的類型對應。這些類型對應現在由 f2py
原生支援
(gh-24555)
f2py
現在處理具有來自模組的 kind
規格的 common
區塊。這進一步擴展了 iso_fortran_env
和 iso_c_binding
等內建函數的可用性。
(gh-25186)
在類似 assert_equal
的函數的第三個引數上自動呼叫 str
#
函數(如 assert_equal
)的第三個引數現在會自動呼叫 str
。這樣,它會模仿內建的 assert
陳述式,其中 assert_equal(a, b, obj)
的作用類似於 assert a == b, obj
。
(gh-24877)
在 isclose
、allclose
中支援類似陣列的 atol
/rtol
#
isclose
和 allclose
中的關鍵字 atol
和 rtol
現在接受純量和陣列。如果給定陣列,則它必須廣播到前兩個陣列引數的形狀。
(gh-24878)
測試函數中一致的失敗訊息#
先前,某些 numpy.testing
斷言列印的訊息將實際結果和預期結果稱為 x
和 y
。現在,這些值始終稱為 ACTUAL
和 DESIRED
。
(gh-24931)
n 維 FFT 轉換允許 s[i] == -1
#
如果 s[i] == -1
,則 fftn
、ifftn
、rfftn
、irfftn
、fft2
、ifft2
、rfft2
和 irfft2
函數現在沿著軸 i
使用整個輸入陣列,這符合陣列 API 標準。
(gh-25495)
為有限 API 保護 PyArrayScalar_VAL 和 PyUnicodeScalarObject#
PyUnicodeScalarObject
保留了 PyUnicodeObject
,當使用 Py_LIMITED_API
時,它不可用。新增保護以隱藏它,並因此也隱藏 PyArrayScalar_VAL
巨集。
(gh-25531)
變更#
np.gradient()
現在傳回一個元組而不是列表,使傳回值不可變。(gh-23861)
由於完全是上下文和執行緒安全的,因此現在只能輸入一次
np.errstate
。np.setbufsize
現在與np.errstate()
相關聯:離開np.errstate
上下文也會重設bufsize
。(gh-23936)
新增了一個公開的
np.lib.array_utils
子模組,目前包含三個函數:byte_bounds
(從np.lib.utils
移動而來)、normalize_axis_tuple
和normalize_axis_index
。(gh-24540)
引入
numpy.bool
作為 NumPy 布林 dtype 的新標準名稱,並將numpy.bool_
作為其別名。請注意,在 NumPy 1.24 之前,np.bool
是 Python 內建bool
的別名。新名稱有助於陣列 API 標準的相容性,並且是更直觀的名稱。(gh-25080)
dtype.flags
值先前儲存為帶符號整數。這表示 aligned dtype 結構旗標會導致設定負數旗標(-128 而非 128)。此旗標現在以無符號(正數)方式儲存。手動檢查旗標的程式碼可能需要調整。這可能包含使用 Cython 0.29.x 編譯的程式碼。(gh-25816)
NumPy 純量表示法的變更#
根據 NEP 51,純量表示法已更新以包含類型資訊,以避免與 Python 純量混淆。
純量現在會印成 np.float64(3.0)
而非僅僅 3.0
。這可能會擾亂儲存數字表示法(例如,儲存到檔案)的工作流程,使其更難以閱讀。它們應儲存為明確的字串,例如使用 str()
或 f"{scalar!s}"
。目前,受影響的使用者可以使用 np.set_printoptions(legacy="1.25")
來取得舊的行為(可能有一些例外)。下游專案的文件可能需要較大的更新,如果程式碼片段有經過測試。我們正在開發 doctest-plus 的工具,以方便更新。
(gh-22449)
NumPy 字串的真值性已變更#
NumPy 字串先前在如何定義字串為 True
或 False
方面不一致,且定義與 Python 使用的定義不符。字串現在在非空時被視為 True
,在為空時被視為 False
。這變更了以下不同的情況
從字串到布林的轉換先前大致等同於
string_array.astype(np.int64).astype(bool)
,表示只有有效的整數才能轉換。現在,"0"
字串將被視為True
,因為它不是空的。如果您需要舊的行為,您可以使用上述步驟(先轉換為整數)或string_array == "0"
(如果輸入僅為0
或1
)。要在舊版 NumPy 上取得新結果,請使用string_array != ""
。np.nonzero(string_array)
先前忽略了空白字元,因此僅包含空白字元的字串被視為False
。空白字元現在被視為True
。
此變更不影響 np.loadtxt
、np.fromstring
或 np.genfromtxt
。前兩者仍然使用整數定義,而 genfromtxt
繼續比對 "true"
(忽略大小寫)。但是,如果將 np.bool_
用作轉換器,則結果將會變更。
此變更確實影響 np.fromregex
,因為它使用直接賦值。
(gh-23871)
為 var 和 std 函數新增了 mean
關鍵字#
通常在需要標準差時,也需要平均值。變異數和平均值的情況也是如此。到目前為止,平均值會被計算兩次,此處針對 var
和 std
函數引入的變更允許傳入預先計算的平均值作為關鍵字引數。請參閱文件字串以取得詳細資訊,以及說明速度提升的範例。
(gh-24126)
移除建構時使用時區的 datetime64 棄用警告#
numpy.datetime64
方法現在在提供的 datetime 字串中包含時區時,會發出 UserWarning 而非 DeprecationWarning。
(gh-24193)
在 64 位元 Windows 上,預設整數 dtype 現在為 64 位元#
在所有 64 位元系統上,預設 NumPy 整數現在為 64 位元,因為 Windows 上歷史悠久的 32 位元預設值是常見問題的來源。大多數使用者應該不會注意到這一點。主要問題可能發生在與以 C 等編譯語言編寫的函式庫介接的程式碼中。如需更多資訊,請參閱 Windows 預設整數。
(gh-24224)
將 numpy.core
重新命名為 numpy._core
#
存取 numpy.core
現在會發出 DeprecationWarning。實際上,我們發現大多數下游 numpy.core
的使用是為了存取在主要 numpy
命名空間中可用的功能。如果您因為某些原因正在使用 numpy.core
中在主要 numpy
命名空間中不可用的功能,這表示您可能正在使用私有的 NumPy 內部元件。您仍然可以透過 numpy._core
存取這些內部元件,而不會出現棄用警告,但我們不為 NumPy 內部元件提供任何回溯相容性保證。如果您認為犯了錯誤,並且需要公開某些內容,請開啟一個 issue。
(gh-24634)
先前透過 NPY_RELAXED_STRIDES_DEBUG
環境變數或 -Drelaxed-strides-debug
config-settings 旗標啟用的「relaxed strides」偵錯建置選項已移除。
(gh-24717)
重新定義 np.intp
/np.uintp
(幾乎永遠不會有變更)#
由於這些類型的實際使用幾乎總是與 size_t
/Py_ssize_t
的使用相符,因此這現在是 C 語言中的定義。先前,它與 intptr_t
和 uintptr_t
相符,這通常會有些微的不正確。這對絕大多數機器沒有影響,因為這些類型的大小僅在極少數的平台上有所不同。
但是,這表示
指標可能不一定能再放入
intp
類型的陣列中。p
和P
字元碼仍然可以使用。在 C 語言中,仍然可以透過
PyArray_DescrFromType('p')
以跨平台的方式建立intptr_t
或uintptr_t
類型的陣列。引入了新的字元碼
nN
。現在在剖析為
npy_intp
類型的引數時,使用 Python C-API 函數是正確的。
(gh-24888)
numpy.fft.helper
已設為私有#
numpy.fft.helper
已重新命名為 numpy.fft._helper
,以指示它是私有子模組。它匯出的所有公用函數都應該從 numpy.fft
存取。
(gh-24945)
numpy.linalg.linalg
已設為私有#
numpy.linalg.linalg
已重新命名為 numpy.linalg._linalg
,以指示它是私有子模組。它匯出的所有公用函數都應該從 numpy.linalg
存取。
(gh-24946)
超出範圍的軸與 axis=None
不同#
在某些情況下,axis=32
或對於 concatenate 任何大的值與 axis=None
相同。除了 concatenate
之外,這已被棄用。任何超出範圍的軸值現在都會產生錯誤,請務必使用 axis=None
。
(gh-25149)
用於 array
和 asarray
建構函式的新 copy
關鍵字含義#
現在 numpy.array
和 numpy.asarray
支援 copy
參數的三個值
None
- 只有在必要時才會建立副本。True
- 總是建立副本。False
- 永遠不建立副本。如果需要副本,則會引發ValueError
。
False
的含義已變更,因為如果需要副本,現在會引發例外狀況。
(gh-25168)
__array__
特殊方法現在接受 copy
關鍵字引數。#
在 copy
將設定為非預設值的情況下(例如,在呼叫 np.asarray(some_object, copy=False)
時),NumPy 會將 copy
傳遞給 __array__
特殊方法。目前,如果在此之後引發非預期的關鍵字引數錯誤,NumPy 將印出警告並在不使用 copy
關鍵字引數的情況下重試。實作 __array__
協定的物件的實作應接受 copy
關鍵字引數,其含義與傳遞給 numpy.array
或 numpy.asarray
時相同。
(gh-25168)
清理使用帶逗號字串初始化 numpy.dtype
的方式#
帶逗號字串的解譯方式略有變更,因為尾隨逗號現在始終會建立結構化 dtype。例如,先前 np.dtype("i")
和 np.dtype("i,")
被視為相同,現在 np.dtype("i,")
將建立具有單一欄位的結構化 dtype。這類似於 np.dtype("i,i")
建立具有兩個欄位的結構化 dtype,並使行為與元組的預期行為一致。
同時,使用括號括住的單一數字來指示子陣列形狀(如 np.dtype("(2)i,")
中所示)的使用方式已被棄用。而是應該使用 np.dtype("(2,)i")
或 np.dtype("2i")
。最終,使用括號中的數字將會引發例外狀況,就像沒有逗號的初始化情況一樣,例如 np.dtype("(2)i")
。
(gh-25434)
複數符號的計算方式變更#
依照陣列 API 標準,複數符號現在計算為 z / |z|
(而不是較不合邏輯的情況,即取實部的符號,除非實部為零,在這種情況下,則傳回虛部的符號)。與實數一樣,如果 z==0
,則傳回零。
(gh-25441)
傳回陣列列表的函數的傳回類型#
傳回 ndarray 列表的函數已變更為傳回 ndarray 元組。每當傳回陣列序列時,都一致地傳回元組,這使得像 Numba 這樣的 JIT 編譯器,以及某些情況下的靜態類型檢查器,更容易支援這些函數。已變更的函數包括:atleast_1d
、atleast_2d
、atleast_3d
、broadcast_arrays
、meshgrid
、ogrid
、histogramdd
。
np.unique
return_inverse
用於多維度輸入的形狀#
當多維度輸入傳遞給帶有 return_inverse=True
的 np.unique
時,現在會對 unique_inverse
輸出進行塑形,以便在使用 axis=None
時,可以使用 np.take(unique, unique_inverse)
直接重建輸入,否則可以使用 np.take_along_axis(unique, unique_inverse, axis=axis)
。
注意
除了 axis=None
之外,此變更已在 2.0.1 中還原。正確的重建始終是 np.take(unique, unique_inverse, axis=axis)
。當需要支援 2.0.0 時,請將 unique_inverse.reshape(-1)
新增至程式碼。
any
和 all
為物件陣列傳回布林值#
any
和 all
函數和方法現在也為物件陣列傳回布林值。先前,它們執行的縮減行為類似於 Python or
和 and
運算子,後者評估為其中一個引數。您可以使用 np.logical_or.reduce
和 np.logical_and.reduce
來實現先前的行為。
(gh-25712)
np.can_cast
無法在 Python int、float 或 complex 上呼叫#
np.can_cast
無法再使用 Python int、float 或 complex 實例呼叫。這是因為 NEP 50 表示 can_cast
的結果不得取決於傳入的值。不幸的是,對於 Python 純量,轉換是否應被視為 "same_kind"
或 "safe"
可能取決於上下文和值,因此目前尚未實作。在某些情況下,這表示您可能必須為以下情況新增特定路徑:if type(obj) in (int, float, complex): ...
。
(gh-26393)