numpy.can_cast

numpy.can_cast(from_, to, casting='safe')

如果数据类型之间的强制转换可以根据强制转换规则进行,则返回true。如果From是标量或数组标量,则如果可以在不溢出或截断为整数的情况下强制转换标量值,则返回true。

参数
from_DTYPE、DTYPE说明符、标量或数组

要从中强制转换的数据类型、标量或数组。

toDTYPE或DTYPE说明符

要强制转换到的数据类型。

casting'no'、'equiv'、'safe'、'same'u kind'、'unsafe'、可选

控制可能发生的数据类型转换。

  • “否”表示完全不应强制转换数据类型。

  • “equiv”表示只允许更改字节顺序。

  • “safe”表示只允许保留值的强制转换。

  • “相同类型”意味着只允许安全的类型或类型内的类型,如float64到float32。

  • “不安全”表示可以进行任何数据转换。

返回
out布尔

如果根据铸造规则可以进行铸造,则为真。

参见

dtype, result_type

笔记

在 1.17.0 版更改: 在简单数据类型和结构化数据类型之间转换只能用于“不安全”转换。允许向多个字段强制转换,但不允许从多个字段强制转换。

在 1.9.0 版更改: 在“安全”强制转换模式下从数字类型强制转换为字符串类型需要字符串数据类型长度足够长,以存储转换的最大整型/浮点值。

实例

基本实例

>>> np.can_cast(np.int32, np.int64)
True
>>> np.can_cast(np.float64, complex)
True
>>> np.can_cast(complex, float)
False
>>> np.can_cast('i8', 'f8')
True
>>> np.can_cast('i8', 'f4')
False
>>> np.can_cast('i4', 'S4')
False

铸造标量

>>> np.can_cast(100, 'i1')
True
>>> np.can_cast(150, 'i1')
False
>>> np.can_cast(150, 'u1')
True
>>> np.can_cast(3.5e100, np.float32)
False
>>> np.can_cast(1000.0, np.float32)
True

数组标量检查值,数组不检查

>>> np.can_cast(np.array(1000.0), np.float32)
True
>>> np.can_cast(np.array([1000.0]), np.float32)
False

使用铸造规则

>>> np.can_cast('i8', 'i8', 'no')
True
>>> np.can_cast('<i8', '>i8', 'no')
False
>>> np.can_cast('<i8', '>i8', 'equiv')
True
>>> np.can_cast('<i4', '>i8', 'equiv')
False
>>> np.can_cast('<i4', '>i8', 'safe')
True
>>> np.can_cast('<i8', '>i4', 'safe')
False
>>> np.can_cast('<i8', '>i4', 'same_kind')
True
>>> np.can_cast('<i8', '>u4', 'same_kind')
False
>>> np.can_cast('<i8', '>u4', 'unsafe')
True