numpy.ufunc.resolve_dtypes#
方法
- ufunc.resolve_dtypes(dtypes, *, signature=None, casting=None, reduction=False)#
查找 NumPy 将用于操作的数据类型(dtypes)。返回输入和输出 dtypes,它们可能与提供的值不同。
注意
此函数始终应用 NEP 50 规则,因为它未提供任何实际值。因此,Python 类型
int
、float
和complex
表现为弱类型,应将其传递给“无类型”的 Python 输入。- 参数:
- dtypes数据类型元组,None,或字面量 int, float, complex
每个操作数的输入数据类型。输出操作数可以是 None,表示必须找到其数据类型。
- signatureDType 元组或 None,可选
如果提供,强制指定操作数的精确 DType(类)。ufunc 的
dtype
参数等同于传递一个仅设置了输出 dtypes 的元组。- casting{'no', 'equiv', 'safe', 'same_kind', 'unsafe'} 之一,可选
当需要进行类型转换时的转换模式。这与 ufunc 调用时的转换模式相同。
- reduction布尔值
如果提供,则假定正在进行归约操作,这会稍微改变类型提升和类型解析规则。
dtypes
对于归约操作通常是(None, np.dtype("i2"), None)
(第一个输入也是输出)。注意
默认的类型转换模式是“same_kind”,然而,从 NumPy 1.24 开始,NumPy 对归约操作使用“unsafe”。
- 返回:
- dtypes数据类型元组
NumPy 将用于计算的数据类型。请注意,这些数据类型可能与传入的数据类型不匹配(需要进行类型转换)。
示例
此 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
、float
或complex
来支持对 Python 标量的“弱”处理>>> np.add.resolve_dtypes((float32, float, None)) (dtype('float32'), dtype('float32'), dtype('float32'))
其中 Python
float
在 ufunc 调用中的行为类似于 Python 值0.0
。(详见 NEP 50。)