numpy.can_cast — NumPy v1.11 Manual (original) (raw)

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

Returns True if cast between data types can occur according to the casting rule. If from is a scalar or array scalar, also returns True if the scalar value can be cast without overflow or truncation to an integer.

Parameters: from : dtype, dtype specifier, scalar, or array Data type, scalar, or array to cast from. totype : dtype or dtype specifier Data type to cast to. casting : {‘no’, ‘equiv’, ‘safe’, ‘same_kind’, ‘unsafe’}, optional Controls what kind of data casting may occur. ‘no’ means the data types should not be cast at all. ‘equiv’ means only byte-order changes are allowed. ‘safe’ means only casts which can preserve values are allowed. ‘same_kind’ means only safe casts or casts within a kind, like float64 to float32, are allowed. ‘unsafe’ means any data conversions may be done.
Returns: out : bool True if cast can occur according to the casting rule.

Notes

Starting in NumPy 1.9, can_cast function now returns False in ‘safe’ casting mode for integer/float dtype and string dtype if the string dtype length is not long enough to store the max integer/float value converted to a string. Previously can_cast in ‘safe’ mode returned True for integer/float dtype and a string dtype of any length.

Examples

Basic examples

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

Casting scalars

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

Array scalar checks the value, array does not

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

Using the casting rules

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