How can I convert 'np.inf' to an integer type?

Viewed 5595

I want to convert the return type of np.inf to int, by default it returns float type.

I have tried the followings, but both give erros.

int(np.inf)

OverflowError: cannot convert float infinity to integer

(np.inf).astype(int64)

AttributeError: 'float' object has no attribute 'astype'

2 Answers

Unfortunately as the comments suggest no there isn't, but if you know the integer type you want, you can use np.iinfo and pick max or min

np.iinfo(np.int32).max  # ---- 2147483647

np.iinfo(np.int32).min  # ---- -2147483648

np.iinfo(np.int64).max  # ---- 9223372036854775807

np.iinfo(np.int64).min  # ---- -9223372036854775808

There is a standard for floating point numbers: "IEEE 754" (it is not specific to python). This standard reserves some special bytes sequences for +/-Infinity and NaN. For integer such special values are not reserved so it is impossible to have an int infinity.

I have done some experimenting: you can do np.array([np.inf]).astype(int)[0] this will give you -9223372036854775808 (-(2 ** 64)/2). np.array([np.nan]).astype(int)[0] also produces the same value.

Related