numpy.ufunc.resolve_dtypes#

方法

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

查找 NumPy 将用于操作的数据类型。返回输入和输出数据类型,它们可能与提供的数据类型不同。

注意

由于此函数未提供任何实际值,因此它始终应用 NEP 50 规则。因此,Python 类型 intfloatcomplex 行为较弱,应将其传递给“无类型”的 Python 输入。

参数:
dtypesdtype 元组、None 或字面量 int、float、complex

每个操作数的输入 dtype。输出操作数可以是 None,表示必须找到 dtype。

signatureDType 元组或 None,可选

如果给出,则强制执行特定操作数的确切 DType(类)。ufunc dtype 参数等效于只传递已设置输出 dtype 的元组。

casting{'no','equiv','safe','same_kind','unsafe'},可选

当需要转换时转换模式。这与 ufunc 调用转换模式相同。

reduction布尔值

如果给出,则解析假定正在执行约简操作,这会稍微改变提升和类型解析规则。dtypes 通常对于约简来说类似于 (None, np.dtype("i2"), None)(第一个输入也是输出)。

注意

默认转换模式是“same_kind”,但是,从 NumPy 1.24 开始,NumPy 对约简使用“unsafe”。

返回:
dtypesdtype 元组

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。)