numpy.can_cast()

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.

See also

dtype, result_type

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
doc_NumPy
2017-01-10 18:13:02
Comments
Leave a Comment

Please login to continue.