numpy.ufunc.resolve_dtypes#

方法

ufunc.resolve_dtypes(dtypes, *, signature=None, casting=None, reduction=False)#

找出 NumPy 將用於運算的 dtype。輸入和輸出 dtype 都會回傳,且可能與提供的 dtype 不同。

註解

由於此函式未提供任何實際值,因此始終套用 NEP 50 規則。因此,Python 型別 intfloatcomplex 的行為較為寬鬆,應針對「未指定型別」的 Python 輸入傳遞這些型別。

參數:
dtypesdtypes 的元組、None 或字面值 int、float、complex

每個運算元的輸入 dtype。輸出運算元可以是 None,表示必須找到 dtype。

signatureDTypes 或 None 的元組,選用

如果給定,則強制執行特定運算元的精確 DType (類別)。ufunc dtype 引數相當於傳遞僅設定輸出 dtype 的元組。

casting{‘no’, ‘equiv’, ‘safe’, ‘same_kind’, ‘unsafe’}, 選用

當需要轉型時的轉型模式。這與 ufunc 呼叫的轉型模式相同。

reduction布林值

如果給定,則解析會假設正在進行 reduce 運算,這會稍微變更升級和型別解析規則。對於 reduce 運算而言,dtypes 通常會是類似 (None, np.dtype("i2"), None) 的形式 (第一個輸入也是輸出)。

註解

預設的轉型模式為「same_kind」,但是,從 NumPy 1.24 開始,NumPy 對於 reduce 運算使用「unsafe」。

回傳值:
dtypesdtypes 的元組

NumPy 將用於計算的 dtype。請注意,dtype 可能與傳入的 dtype 不符 (必要時會進行轉型)。

範例

此 API 需要傳遞 dtype,為了方便起見,定義它們

>>> import numpy as np
>>> int32 = np.dtype("int32")
>>> float32 = np.dtype("float32")

典型的 ufunc 呼叫不會傳遞輸出 dtype。numpy.add 有兩個輸入和一個輸出,因此將輸出保留為 None (未提供)

>>> np.add.resolve_dtypes((int32, float32, None))
(dtype('float64'), dtype('float64'), dtype('float64'))

找到的迴圈對所有運算元 (包括輸出) 使用「float64」,第一個輸入將會被轉型。

resolve_dtypes 支援透過傳遞 intfloatcomplex 來處理 Python 純量值的「寬鬆」行為

>>> np.add.resolve_dtypes((float32, float, None))
(dtype('float32'), dtype('float32'), dtype('float32'))

其中 Python 的 float 行為類似於 ufunc 呼叫中的 Python 值 0.0。(詳情請參閱 NEP 50。)