numpy.ufunc.resolve_dtypes#

method

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

查找 NumPy 将用于操作的 dtypes. 返回输入和输出 dtypes,它们可能与提供的 dtypes 不同.

备注

此函数始终应用 NEP 50 规则,因为它没有提供任何实际值. 因此,Python 类型 int , floatcomplex 的行为较弱,应该为"未类型化"的 Python 输入传递.

参数:
dtypesdtypes 的元组,None,或字面整数,浮点数,复数

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

signatureDTypes 或 None 的元组,可选

如果给定,则强制执行特定操作数的精确 DType(类). ufunc 的 dtype 参数等效于传递一个仅设置了输出 dtypes 的元组.

casting{‘no’, ‘equiv’, ‘safe’, ‘same_kind’, ‘unsafe’},可选

必要时进行类型转换的转换模式. 这与 ufunc 调用转换模式相同.

归约布尔值

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

备注

默认的类型转换模式是 “same_kind”,但是,从 NumPy 1.24 开始,NumPy 对归约使用 “unsafe”.

返回:
dtypesdtypes 元组

NumPy 将用于计算的 dtypes.请注意,dtypes 可能与传入的 dtypes 不匹配(类型转换是必要的).

示例

此 API 需要传递 dtypes,为了方便起见,定义它们:

>>> 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 , floatcomplex 来支持 Python 标量的"弱"处理:

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

其中 Python float 的行为类似于 ufunc 调用中的 Python 值 0.0 .(有关详细信息,请参阅 NEP 50 .)