Как я могу преобразовать 'np.inf' в целочисленный тип? - PullRequest
0 голосов
/ 28 июня 2019

Я хочу преобразовать тип возврата np.inf в int, по умолчанию возвращается тип float.

Я пробовал следующее, но оба дают ошибки.

int(np.inf)

OverflowError: невозможно преобразовать бесконечность с плавающей точкой в ​​целое число

(np.inf).astype(int64)

AttributeError: у объекта 'float' нет атрибута 'astype'

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

К сожалению, поскольку комментарии показывают, что нет, это не так, но если вы знаете требуемый целочисленный тип, вы можете использовать np.iinfo и выбрать max или 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
0 голосов
/ 28 июня 2019

Существует стандарт для чисел с плавающей запятой: «IEEE 754» (он не является специфичным для python).Этот стандарт резервирует некоторые специальные байтовые последовательности для +/- Infinity и NaN.Для целых чисел такие специальные значения не зарезервированы, поэтому невозможно получить целую бесконечность.

Я провел некоторые эксперименты: вы можете сделать np.array([np.inf]).astype(int)[0], что даст вам -9223372036854775808 (-(2 ** 64)/2).np.array([np.nan]).astype(int)[0] также выдает то же значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...