numpy.ufunc.resolve_dtypes#
方法
- ufunc.resolve_dtypes(dtypes, *, signature=None, casting=None, reduction=False)#
找出 NumPy 將用於運算的 dtype。輸入和輸出 dtype 都會回傳,且可能與提供的 dtype 不同。
註解
由於此函式未提供任何實際值,因此始終套用 NEP 50 規則。因此,Python 型別
int
、float
和complex
的行為較為寬鬆,應針對「未指定型別」的 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
支援透過傳遞int
、float
或complex
來處理 Python 純量值的「寬鬆」行為>>> np.add.resolve_dtypes((float32, float, None)) (dtype('float32'), dtype('float32'), dtype('float32'))
其中 Python 的
float
行為類似於 ufunc 呼叫中的 Python 值0.0
。(詳情請參閱 NEP 50。)