numpy.ufunc.resolve_dtypes#
方法
- ufunc.resolve_dtypes(dtypes, *, signature=None, casting=None, reduction=False)#
查找 NumPy 将用于操作的 dtype。输入和输出的 dtype 都会被返回,并且可能与提供的不同。
注意
此函数始终应用 NEP 50 规则,因为它不提供任何实际值。Python 类型
int、float和complex因此表现得较弱,应为“未类型化”的 Python 输入传递。- 参数:
- dtypesdtype、None 或字面量 int、float、complex 的元组
每个操作数的输入 dtype。输出操作数可以为 None,表示必须找到 dtype。
- signatureDTypes 或 None 的元组,可选
如果给出,则强制使用特定操作数的精确 DType(类)。ufunc 的
dtype参数等同于仅设置输出 dtype 的元组。- casting{‘no’, ‘equiv’, ‘safe’, ‘same_kind’, ‘unsafe’}, optional
在需要转换类型时使用的转换模式。这与 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通过传递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。)