上一主题

数据类型例程

下一主题

numpy.promote_types

numpy.can_cast

numpy.can_cast(from, totype, casting = 'safe')

返回True如果根据转换规则可以在数据类型之间进行转换,则返回True。如果from是标量或数组标量,则如果可以转换标量值而不会溢出或截断为整数,则返回True。

参数:

from:dtype,dtype说明符,标量或数组

要从中投射的数据类型,标量或数组。

totype:dtype或dtype说明符

要投射到的数据类型。

投射:{'no','equiv','safe','same_kind','unsafe'},可选

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

  • 'no'意味着不应该转换数据类型。
  • 'equiv'意味着只允许字节顺序改变。
  • “安全”意味着只允许保留值的转换。
  • 'same_kind'表示只允许一种类型中的安全类型转换,例如float64到float32。
  • “不安全”表示可以进行任何数据转换。
返回:

out:bool

如果根据投射规则可以进行转换,则为true。

也可以看看

dtyperesult_type

笔记

从NumPy 1.9开始,对于integer / float dtype和string dtype,can_cast函数现在以“安全”转换模式返回False,如果字符串dtype长度不够长,不能存储转换为字符串的最大整数/浮点值。以前在“安全”模式下的can_cast对于integer / float dtype和任何长度的字符串dtype返回True。

例子

基本示例

>>> np.can_cast(np.int32, np.int64)
True
>>> np.can_cast(np.float64, np.complex)
True
>>> np.can_cast(np.complex, np.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